{"componentChunkName":"component---src-templates-blog-post-js","path":"/blog/2026-10-29-camp-mode/","result":{"data":{"site":{"siteMetadata":{"siteUrl":"https://avniproject.org","twitterHandle":"@avniproject"}},"post":{"id":"8d823ad0-b912-52c0-8fe7-c4227e7a285d","html":"<p>We shipped camp mode in Avni 18.2. It came out of a problem that mobile clinics kept bringing to us, and the answer we landed on is the oldest invention there is, the wheel. Mobile medical units are where this started, but nothing in it is medical. A legal aid camp, a survey camp, or any day where several people record on their own phones without internet works the same way.</p>\n<h2>Why we built it</h2>\n<p>Avni grew up around a field worker walking alone from village to village. Her phone holds her work, and the server is where that work meets everyone else's. We call that meeting a <em>sync</em>. For a lone field worker that model has held up well for years.</p>\n<p>Then several organisations running mobile clinics came to us with the same problem. Their clinics run out of a van, parked for the day in a village with no signal, with four or five staff working on their own phones. Without signal, the server was the only place two phones could ever meet. So a patient registered at the front desk stayed on the receptionist's phone, and the nurse at the next table had two choices. She could wait until the evening to see the patient's details, or she could register the same patient again. By the end of the week the same people sat in the system twice, and someone in the office had to find the duplicates and sort them out by hand.</p>\n<p>What they asked for was easy to say: let the phones in the van talk to each other. We did not get there in one go. Our first attempt had every phone talking directly to every other phone, and that turned out to be fragile across makes of phone. The next idea was a box in the van, which would have meant building a second app just for the staff. In the end we reinvented the wheel, on purpose. One of the clinic's own phones becomes the hub. It starts its own Wi-Fi network, and the other phones join it as its spokes. For the rest of the day they share their work with the hub, and none of them syncs with the server. When the camp ends, each phone syncs with the server as usual.</p>\n<h2>A day in camp</h2>\n<p>The first pilot is coming up soon, so the day below is an imagined one, pieced together from the office dry runs we did of the same flow.</p>\n<p>The receptionist arrives first. She opens <strong>Clinic sharing</strong> on the hub phone and taps <strong>Start hub</strong>.</p>\n<div style=\"max-width: 280px; margin: 0 auto;\">\n    <figure class=\"gatsby-resp-image-figure\" style>\n    <span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/3a7064f25cf025864b50f7bc76129f26/302a4/start-hub.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 115.8203125%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAAACXBIWXMAAAAAAAAD6AF+hNEZAAAEMUlEQVQ4y61U20+bZRj/btRozOaMCadCCy3nbigmdCbekXAIAcLJMG+48C9xc9MNDzDZgOE2D5luahCDXqgXsgvH5qClpe3Xln49MCiFgQTb0nN/Ps/btYNliV74Jb/83ud5n+f3Ps97+CSNRoPy8nLU1taiqqoKNTU1qKyshFarRUVFBXLzB5nBsSeOn0B5rRaa4zroKIf9UmlpKRobGzE0NISOjg50d3ejvb0dTU1NqK6uzgvlUFJSgubmZpx6+xTe6hmA+p1XoTprwMk330CpqhQSJ5SVleUTnxyr1epDPmZeSKfTCXGNjuK0ahQVFYl5idviarhlbrOhoQF6vV60XV9fj7q6OsG5bWBwIuexaDktoK/Xo6WlJStYUFCAnp4eIcjVtLa2oqurCwaDQQR1dnaira1NbEdxcTE4vrCwUICrOvbyMRhOGjA8PAyVSgWpt7dXCDL6+/sxMDCAvr4+wTmbeXBwUPg5nvkgcho8ljKZDJLptEA8kRBIkS8WjyORSiKRTCKeJD9xIpXKxz4NacqTkiSwYrXBY5cR8Hhh+fM+Nrw+uG022E1L8DldBCcUmrebTPi3T/o7FsWM04bvHVbMKk5ME0+TPbMiY9Yl4ye3Az+Tf1bYdvzq9xzGqge/EP9GHKKupMXNDai+uAT1V+N45dooSmhc+PkY8Rikyx9AunTuEd7P4tOzhzGW43NY3AxAMpJgxZeX8dqtq6gg0Zobk9B/MyX42fELeGb8PPH5PLMvzxMX8NxENub5iWGYtjYgxWmj5d0dWHa2YBV4KGB+uAkn+R2724QdMc7aWZb/2oZ9ewt2irVTnkwcp0OU0iQY3t1FPBQG+JTDYaRjMYBOLRHZB+h06ajJH0GK/Ix4JAKk0k8/lMj+Pv64cwe/z81hyWyGZXk5z/N378K0tCTA9sLiItyKG3O3b8O/uioEMgS+LulMGhlxbaiCUCiEGK0cpur2aYFoNCrG7EtQ1TnOzeWwS52xL0VdCnEW5GCj0YhlqsBJ981M1blcLsFutxuKosBGd5LnTHQPLRYLrFYrgsGgsDlub2/vsWCE9sNMQa6VFTgoyePxYD0QwDIl+fw+2Ox2alOBz+eD7HDA4/Vmbb9f2EYSdVIBIepI7GF0PwoHJbtkGT43BVJVLhJxEtb9q/BRsnfFjQDtmXXJjI0Ha1BIgOc31taQoNYPHpAUo72553Ji3iljgTaced4hw0hjs88r2ORVYH2wins0xyx8HgVyYA1roT0EImEEwiHxniW+b9U3P0PVzSlobkxA+/UV4kkcpVdz9NrIIx7FkasjeOn6xSznfZ/gxSsf4YXJD3Fk6mO6u0FI94PrKKbA17+9LphfSBk/u5F3CacfY/QJzo1Hz2T54ntYCNLT26NTnqaHf4t/EPT4vyMw/0A/hZn/CI79UXGAtST8z98/Md88AR0FalEAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"The Clinic sharing screen, with Scan to join and Start hub\" title=\"The Clinic sharing screen, with Scan to join and Start hub\" src=\"/static/3a7064f25cf025864b50f7bc76129f26/302a4/start-hub.png\" srcset=\"/static/3a7064f25cf025864b50f7bc76129f26/01e7c/start-hub.png 512w,\n/static/3a7064f25cf025864b50f7bc76129f26/2bef9/start-hub.png 1024w,\n/static/3a7064f25cf025864b50f7bc76129f26/302a4/start-hub.png 1080w\" sizes=\"(max-width: 1080px) 100vw, 1080px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n  </a>\n    </span>\n    <figcaption class=\"gatsby-resp-image-figcaption\">The Clinic sharing screen, with Scan to join and Start hub</figcaption>\n  </figure>\n</div>\n<p><em>The Clinic sharing screen, with Scan to join and Start hub.</em></p>\n<p>Her screen now shows a code to scan, with the name and password of the hub's Wi-Fi network. Below it, the hub keeps a count of the phones that synced with it in the last 5 minutes.</p>\n<div style=\"max-width: 280px; margin: 0 auto;\">\n    <figure class=\"gatsby-resp-image-figure\" style>\n    <span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/0091a5197529a2e4d7f0c97dd217e463/302a4/running-hub.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 222.265625%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAsCAYAAABloJjNAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEIElEQVRIx+2VR0tmWRCG708QdUYxB0wgo4KDYWRczMisxcUsXDS4aGwdwZzbiIluFBVdiAlp/RMueuE/UMw55xzbVNNPwfnmc+azVcZlXyhO3Tqn3vOet+rca/n7+0tycrKkpKRIYmKiREREiI+PjwQEBAhzxvz8/Gw+8xGRkfJLXLz89sfv4v7XT/Lzn79KkG+gWCz08PAQX19fTfLy8hJvb281fIw5e1BGsyG+b5C//OD+o/h9XWcFBQVJUlKShISESHh4uMTHx0tUVJRER0dLTEyMWlhYmAIEBgb+x4iHhYZJWlqahIaGiuXu7i4JCQni5uYmwcHBEhcXJ5FfjwNobGysbkDcyclJXF1dxcXFxWa8Ozs76yneZbwTT09Psfr6+qSrq0sYe3t7paenRwYGBqS/v19H7NOnT2r4g4OD6jOadeR2dHToaImD5+zsTL58+SIHBwdqp6encnV1pXPn5+dyeXkpJycnjlLFur29Fez6+loD4+PjkpGRIS0tLWqlpaVSW1srHz58kJycHMnPz5fm5mYpLCyU0dFRzSHX4NgY3t3d6bi2tib19fVSWVkp5eXlClpdXS2ZmZnS2NioMcDKyspkb29Pc+7v7/9haBwT5Cho+v79e00uKSnR97y8PAUnzobp6elyfHz8OKA9w7dv30pBQYF0dnYq06ysLGUFOMc1ElxcXDzNENErKir05mRnZyubhoYG+fjxo9TU1CgYbHk/Ojp6GpAKklBUVCR1dXXS3t4ub968kaGhIW2V4uJinWPNNzU0R15dXdXjkgAAfUal0REJqHRra6tu9CzApaUlaWtrk6amJunu7tZqYjAzR6XaaLq/v/804OLionY9rUJVaZfU1FQtCMDoiBTIsL29/SDXBsgOJjg9Pa3FgBFJVVVVD3owNzdXWwZQc1vINywdFgUdsZmZGdnd3dVEWgTN6IKdnR1bhR0e2QQYaVbuMok3Nzd6jwEEgHvNPJsCfnh46JihfYAEElkMMO/4mAFlE3z7xrYBmhejIWw2Nzf1qFtbW8oE37xjy8vLusZ8gRxW+TmPfaKjOKMFfXqPO4zY6+vrsrGxoaNhg7+ysqLzzBFjhDU624Na0KafWIw+HAUgmhb9GElkREd81vKOPHyIHzCkmmNjY9rQCwsLymR+fl5HwGdnZ5UNMeanpqb0RIzEJycnlbENEBYETcLExIQmAESMjfiKE5ubm9M46zH6lBwugymqApLAYrMAIIDRlwedTDfYdwRx/AdV5n+ALrQHho5oZK8jPefI7OfQFywLYYeHh2VkZETt8+fPytYwxX+OIQUXweIakYxWpjCmdV5qYL2osZ/zWPZiv4a9PuCrH/k74HfAVwC0/4M91rz/Xvcsho/9kJ6a+yZDPkd8I/kuYvjEXsTw/wL+DQAP/oCwSH32AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"A running hub, with its code, network name and password, and End camp\" title=\"A running hub, with its code, network name and password, and End camp\" src=\"/static/0091a5197529a2e4d7f0c97dd217e463/302a4/running-hub.png\" srcset=\"/static/0091a5197529a2e4d7f0c97dd217e463/01e7c/running-hub.png 512w,\n/static/0091a5197529a2e4d7f0c97dd217e463/2bef9/running-hub.png 1024w,\n/static/0091a5197529a2e4d7f0c97dd217e463/302a4/running-hub.png 1080w\" sizes=\"(max-width: 1080px) 100vw, 1080px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n  </a>\n    </span>\n    <figcaption class=\"gatsby-resp-image-figcaption\">A running hub, with its code, network name and password, and End camp</figcaption>\n  </figure>\n</div>\n<p><em>A running hub, with its code, network name and password.</em></p>\n<p>As the others settle in, the nurse, the doctor and the pharmacist tap <strong>Scan to join</strong> and point their cameras at the code on the hub. From then on, each joined phone shares with the hub every 30 seconds by itself. <strong>Sync with hub</strong> is there for anyone who would rather not wait.</p>\n<div style=\"max-width: 280px; margin: 0 auto;\">\n    <figure class=\"gatsby-resp-image-figure\" style>\n    <span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/3df577eb04c4a709dbaf627211532255/302a4/joined-phone.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 200%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC+klEQVRIx+2Ty0tbQRTGL3TZRVeNqPh+gqgb3fgCk+Db0vTf6WtvY0tbEUsrtt1YqBYsqAURXJli2sZGYt7v3OQmUcw7Rk2+zpyYoLQLC1lm4He/M+fOfHPmcq7Q1NSE7u5u9Pf3k9bW1qKhoQH19fWkBQrzuro6tLe3Y2BgAL29vRgcHERfXx96enrQ2NgIgT9aW1uJlpYW8AP4xoIW4Ouu0tzcTHva2tqIzs5O2iPwE1UqFWpqatDV1YXx8XE6fWhoCKOjoxgZGUFHRwcqKipQXV2NqqoqorKyklQmk5GRWq3OGw4PD2NychJKpZIYGxsjuNnExASmpqboEL5OLpcTCoWClOcK+enpaVIhk8kgHo8jmUwikUhcIxaL0btIJELv0+k05aPRKOnp6Sn4fq6pVIpUOD8/h9lshtFohF6vh8fjgcvlwuHhIQwGA0wmE7RaLcV2u53Q6XSwWq341xC46/HxMXFyclKMQ6EQweOjo6Nijsdcg8Egstkskcvligi8VF6V3++HKIrw+XwEjwOBACRJornX6yUzbsTznMLgRsUKz9iVnR43/Gyjg13VK/oQDIeLiGyjl5mHWYVcRYkdwip0ut0wsk/lZgdlmdFZ9iJfYSaVht9mh2i1Ieh0wWexQHI44TGZEQ1IsOkP4DVbEHS54WEqsrVuowlnkWi+pGzu+jcUY1G8+qlhfMf8/h5eancpnmO8O/iFeaYL+1rGHt6QajH3Q4NFgw4fLQZ8MB9gyfibkJIJCN/cdtxZfEHcfjsL2fvXuLv0CrcWZiA8ewTh+VPGEwizl/CY59SP8+/Vl8w8xKbLBkEXkqDaWIVqcxX31ldwf2MFDza/YHr9M+Rry1B+XYZi7W94Ps+n4pr9sJTvwxhr3jhvZKaJS+XNHGMN/D9cMC+BG+zs7GB7exsajQZbW1vY3d2lBrbZbDeGNzr3osbmf4bD6aR+tDscNJdYv/EevCkBBv16KPEQrv42paD0hiW/ctmwbFg2LBuWDcuGJRp/AP0FO44Hq5/ZAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"A joined phone in a camp, with Sync with hub and Leave camp\" title=\"A joined phone in a camp, with Sync with hub and Leave camp\" src=\"/static/3df577eb04c4a709dbaf627211532255/302a4/joined-phone.png\" srcset=\"/static/3df577eb04c4a709dbaf627211532255/01e7c/joined-phone.png 512w,\n/static/3df577eb04c4a709dbaf627211532255/2bef9/joined-phone.png 1024w,\n/static/3df577eb04c4a709dbaf627211532255/302a4/joined-phone.png 1080w\" sizes=\"(max-width: 1080px) 100vw, 1080px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n  </a>\n    </span>\n    <figcaption class=\"gatsby-resp-image-figcaption\">A joined phone in a camp, with Sync with hub and Leave camp</figcaption>\n  </figure>\n</div>\n<p><em>A phone joined to the hub, in a camp.</em></p>\n<p>Late in the morning an elderly woman comes in, holding her granddaughter's hand, because the walk from the next village is a long one for her. The receptionist registers her on the hub. A minute later she is on the nurse's phone, and the nurse records her vitals and adds a photo. The doctor, at the far end of the van, sees the vitals on his own phone. The photo travels to the hub with her visit, and the doctor's phone fetches it from the hub when he opens it.</p>\n<p>A clinic day has its interruptions. When the nurse steps outside to talk to a family, she walks out of range and her phone loses the hub's network. Her screen offers <strong>Rejoin</strong> with the hub's name, and she taps it when she comes back in. Later in the afternoon the hub phone restarts. The hub starts again by itself when the receptionist opens Avni, but on a new network with a new name and password, so the others get up from their tables and scan its new code. Records shared before the restart stay on their phones.</p>\n<p>When the last patient has left, the receptionist taps <strong>End camp</strong>. The hub asks her to tap it again to confirm, and warns that this cannot be undone.</p>\n<div style=\"max-width: 280px; margin: 0 auto;\">\n    <figure class=\"gatsby-resp-image-figure\" style>\n    <span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/d2f28df701dd0969c5d4c5c0b2ec5e92/302a4/end-camp.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 222.265625%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAsCAYAAABloJjNAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEcUlEQVRIx+1WR0tlSRS+K3OcNiIuBLENmHMOi1YQwYU5Z0UXrvRv6Fq3KqL+AhP2DIJZRNuIIzYz5ufz+Vp0xPGb+x0p57Uj3Trtsi9871SdOuer71TVrfs0R0dHZGVlISUlBaGhofD29oadnR3ot4SDg8Njm+O+vr4ICgxCdFwMnBsCEJATDhc7J2gMZIC9vb0E0z6FIrO0Tk5Oj22HX5xgY28rbY0DPj4+cHFxgaurKzw9PfHu3Tu4ubnBw8MD7u7uMsZkxiqoPq2LswveB7yXOM3W1hZeXl6wsbGBs7OzkJCQYJsT0G9lZSUx1tbWj1B9VhEcHCyVaunp6UhNTQUtkZaWhoyMjK+QmZkpYJvrzTatGmdecnKyWK21tRVtbW1QtqWlBbW1taivr0d1dbVA9Zubm1FXVydt+ti3zCW0hoYGKDCgsLBQ5CcmJgoiIyMRExOD+Ph4OQVhYWHiDw8PR0FBgeRYcmhNTU0gGhsbZbC8vByxsbGIiooSMiZHR0cjJCQEcXFx4iMZbVVVleQwV/F8RUjLUrimijAiIkL6Shn9nDAoKAg1NTXfJlQKGUwVPOwkoDr2SU5StQRcT0sxzypkEEn8/PxkzaiGpSYkJAgRQbXsf1ehImQCFZEsKSkJAQEBckwIquQYY767hjwyZWVljwnqrKl1VO87JyFeRFhaWirBLJOHnBujNkeVyjFO+mJCnnoeFW4Az6S/v78QqjPJpeAyVFZW/pdQ7S7BE19SUiKzc2MCAwMlmWVSGSfhGHedu8w3hiJUPrlEIXeroqJCZqTC/Px8QV5enrwNxcXFMhHfIlr6ioqKJF6BHKKQs3R1dWFkZASDg4OCoaEhDA8PS3tgYEDQ39//2Fbo6+sTMK67u1sUa1zYtbU18DGZTLi5ucH19TWurq7wmmdlZUU2SaPcpaUlHB0dYXFxEevr6zK4sLDwKtLZ2dkHQv6Q6O7uDoeHhzg7O8PFxQUMBoOAvuPjY5yensqktCcnJ2IZxzaf+fn5B0JuAjtGoxHLy8vY2dnB1taWKF1dXcXu7q5Y9pVvY2NDqqBlJRRDUaxW42VAp9lsliASbG9vY29vT8g3Nzelv64n73/+LOtNoj8PDmA4N+BIV09CcgghX7WZmRnc399jf39fSiE5S2GpLNOgL8O57r80XuBQJzrWfU+fubm5f0uenp4WJ0ktrXqubm/xh9mEA/Ml7vSxL7d/4ffzMxi+mLF9eoyrv3WFOqEo5EGl3G89Jj1hy2TE9qURd3rffH+HTxcGnN7eYPX8FJz+k762QkiZvb29mJqawujoKMbGxsRaYmJsHFMTkzomZHxifBwfJycxqdup8Qn89vFX9PT0PJTMr5r6lPJ24RWVnZ2NnJycR7D/QUe2BT5YWCI3N1e+kBovVG4Md5tgm9I522vAHHLJ5cCbQl0/lu3/A7m+3hJvT/gj5T1b8k/Cn4RvSGj5b+A1Y9pzwSqB31m+8Jag72ncixW2t7ejs7MTHR0dArbpe5XCHyX8B0fF5JAZ3hI9AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"The hub asking to confirm End camp\" title=\"The hub asking to confirm End camp\" src=\"/static/d2f28df701dd0969c5d4c5c0b2ec5e92/302a4/end-camp.png\" srcset=\"/static/d2f28df701dd0969c5d4c5c0b2ec5e92/01e7c/end-camp.png 512w,\n/static/d2f28df701dd0969c5d4c5c0b2ec5e92/2bef9/end-camp.png 1024w,\n/static/d2f28df701dd0969c5d4c5c0b2ec5e92/302a4/end-camp.png 1080w\" sizes=\"(max-width: 1080px) 100vw, 1080px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n  </a>\n    </span>\n    <figcaption class=\"gatsby-resp-image-figcaption\">The hub asking to confirm End camp</figcaption>\n  </figure>\n</div>\n<p><em>The hub asking to confirm End camp.</em></p>\n<p>Her colleagues keep Avni open while they pack up. At its next sync with the hub, each of their phones syncs one last time and then leaves the camp, and the hub ticks off each phone as it leaves. Once all three have left, she taps <strong>Close hub</strong>, and the hub deletes the records and photos it kept for the other phones.</p>\n<p>On the drive back the van comes into signal. After leaving the camp, each phone syncs with the server as usual and uploads its own work. The nurse's visit, though, waits on her phone until the woman, registered on the receptionist's phone, reaches the server. So every phone from the camp needs a sync once it is back in signal.</p>\n<p>A legal aid camp follows the same flow. A paralegal at the first desk starts the hub and registers each person who comes in. A minute later the person is on the phone of the lawyer at the next table, who records the consultation there. At the end of the day the paralegal ends the camp, and each phone uploads its own work once it syncs with the server.</p>\n<h2>At a glance</h2>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>In camp mode</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>The hub</td>\n<td>One phone in the clinic. It starts its own Wi-Fi network</td>\n</tr>\n<tr>\n<td>The other phones</td>\n<td>Each joined phone shares with the hub every 30 seconds by itself</td>\n</tr>\n<tr>\n<td>A camp</td>\n<td>Starting a hub, or joining one, puts a phone in a camp. A phone in a camp does not sync with the server</td>\n</tr>\n<tr>\n<td>After the camp</td>\n<td>Each phone syncs with the server as usual, and uploads its own work</td>\n</tr>\n<tr>\n<td>What you get</td>\n<td>The staff work on their own phones as one team, without internet</td>\n</tr>\n<tr>\n<td>Is it ready?</td>\n<td>Shipped in 18.2. The first pilot is coming up soon</td>\n</tr>\n</tbody>\n</table>\n<h2>Before you start</h2>\n<ol>\n<li><strong>Switch it on.</strong> In the web app, open the organisation settings page and turn on <strong>Enable clinic sharing</strong>. If the organisation encrypts data on the phone, the <strong>Clinic sharing</strong> menu stays hidden.</li>\n<li><strong>Sync before you leave.</strong> Sync every phone with the server just before the camp, so that its forms and other organisation setup match the hub's.</li>\n<li><strong>Pick the hub.</strong> The hub phone needs Android 10 or later, and it must be logged in as a user with all privileges.</li>\n<li><strong>Edit your own records.</strong> Each person should edit only the records they created. Through the hub, the version that reaches the hub last is kept.</li>\n</ol>\n<div style=\"max-width: 600px; margin: 0 auto;\">\n    <figure class=\"gatsby-resp-image-figure\" style>\n    <span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 2048px; \">\n      <a class=\"gatsby-resp-image-link\" href=\"/static/65b9de11e8c3d6e6909a10ad2e3c6191/35b00/org-setting.png\" style=\"display: block\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 52.1484375%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABKElEQVQoz4WSCW6DMBBFuf+heo1eIQ3gBbzgBX7nQ0BOlTQjjSyE/fxmxt0wjLB2QskZvXa4DwrzPKOUgnVdsW3btZ55fmc5o5SCMQZaclkWdLfbjwCcACpqrQghIMa4Az8Fgfe+xziqQ0rOdDQ0xiKnhGGWVEYumHYDRmvWJoMAozSs2DnnDmAvNxBKs5AqnA/w3u/6LO2EttECrchoM0vpejfuqErDGBf4mKC02fvCC1rLt0ArMElr7WHI3h1ZEMXQh/gS1kJb4CwgQs30KDmlDGbORUqWnoix1nofzEdDTlkGMkrLWFWSOXQEEVhk9Uu5DJltD18Z8n+UXrPfhPGVXECunDTfFPtBQ27kpv8s/8YzUHpAM4I4sfp4i+9grXkuK76+DX4BABkPlvLfr7UAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"Organisation settings in the web app, with Enable clinic sharing turned on\" title=\"Organisation settings in the web app, with Enable clinic sharing turned on\" src=\"/static/65b9de11e8c3d6e6909a10ad2e3c6191/a878e/org-setting.png\" srcset=\"/static/65b9de11e8c3d6e6909a10ad2e3c6191/01e7c/org-setting.png 512w,\n/static/65b9de11e8c3d6e6909a10ad2e3c6191/2bef9/org-setting.png 1024w,\n/static/65b9de11e8c3d6e6909a10ad2e3c6191/a878e/org-setting.png 2048w,\n/static/65b9de11e8c3d6e6909a10ad2e3c6191/f581c/org-setting.png 3072w,\n/static/65b9de11e8c3d6e6909a10ad2e3c6191/35b00/org-setting.png 3420w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n  </a>\n    </span>\n    <figcaption class=\"gatsby-resp-image-figcaption\">Organisation settings in the web app, with Enable clinic sharing turned on</figcaption>\n  </figure>\n</div>\n<p><em>Enable clinic sharing in the organisation settings.</em></p>\n<p>The <a href=\"https://avni.readme.io/docs/clinic-sharing\">clinic sharing guide</a> has the rest.</p>\n<h2>Notes for the technically curious</h2>\n<p>Photos travel to the hub along with the records they belong to, and a joined phone syncs with the hub every 30 seconds while Avni is open. What keeps the server straight is ownership. A record from another phone belongs to that phone, and that phone uploads it to the server. Until it does, a phone holds back its own work that depends on it. On the server, the last upload wins, as with sync.</p>\n<hr>\n<p><em><strong>\"Sometimes the oldest design is still the right one.\"</strong></em></p>","frontmatter":{"date":"October 29, 2026","title":"Camp mode : reinventing the wheel, on purpose","author":"Himesh R","description":"Avni 18.2 lets a mobile clinic's phones share patients through one hub phone, all day, with no internet.","tags":["Avni","release","Mobile Medical Units"],"image":{"childImageSharp":{"resize":{"src":"/static/0091a5197529a2e4d7f0c97dd217e463/f3583/running-hub.png","height":2667,"width":1200}}}},"fields":{"slug":"/blog/2026-10-29-camp-mode/"}}},"pageContext":{"id":"8d823ad0-b912-52c0-8fe7-c4227e7a285d"}},"staticQueryHashes":["1175525803","4080856488"]}