{"componentChunkName":"component---src-templates-blog-post-js","path":"/blog/2026-08-31-august-release/","result":{"data":{"site":{"siteMetadata":{"siteUrl":"https://avniproject.org","twitterHandle":"@avniproject"}},"post":{"id":"4b4d753a-0413-5aa6-82c5-7061c562f181","html":"<h2>AI Autopilot: set up an Avni app from a field-workflow specification</h2>\n<a href=\"https://github.com/avniproject/avni-webapp/issues/1702\" target=\"_blank\" style=\"text-decoration: none; color: inherit; display: block; transition: all 0.3s ease;\" onmouseover=\"this.style.opacity=&apos;0.95&apos;; this.style.transform=&apos;translateY(-2px)&apos;; this.style.boxShadow=&apos;0 8px 24px rgba(0,102,204,0.15)&apos;;\" onmouseout=\"this.style.opacity=&apos;1&apos;; this.style.transform=&apos;translateY(0)&apos;; this.style.boxShadow=&apos;none&apos;;\">\n<div style=\"display: flex; gap: 40px; align-items: center; padding: 40px; margin-bottom: 20px; cursor: pointer; background: #ffffff; transition: all 0.3s ease;\">\n    <div style=\"flex: 1; min-width: 250px;\">\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: 888px; \">\n      <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 51.7578125%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABn0lEQVQoz6WPy27TQBSG/UywgKhIiMsGCSFIQVyEBBt2PAISL4CKKoSicFFKi1SVRXkA3oANCKK0IThOfMmlodDa4xnbtHwcG9ImgV0Xn/5z/jnnnxnr4brD/ddNrlZbzFdtrj1vc7vW4UrV4WLF4fKzLuUXLuWXPvO1gPJSwKVcl/vcXB1yfXWLW2sjbrzZ5sG771h3ay3urbQ4tWAz99jh9GKHCxWPEwsuxx65lBZ9Sk96Qp+5yoCTwvGnQ0rVEedfbXNm6Qfnlnc4uxJy5+0uVjPY4X075EP3Dx//6icvou4rPgubPUWzH1MPFA3RzUHMhtDoa1Etfa4GeyvGSrSCvYxfP8ekBfs5WSpnKd/CpADx9rJD9qfqhNRI4G4YEZt0guyASKfFJesNw1rdyGKG0tnUzCEpYaSwQgk0SYYWw/MCOl2PttPlq+1gtzt8adkEvo/v5r7LYDgqfD/oFerKzng/UhIYSao2yTQ6IdbmoFex+XfmP6g4zgNjkiQtDDODnqn1TD3ZG8lQsZYvS2DxZMEckUhNBpr0SIwDfwPjitbAAF8azAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"Avni Autopilot panel with a drop zone to upload the scoping/modelling specification document\" title=\"Avni Autopilot panel with a drop zone to upload the scoping/modelling specification document\" src=\"/static/3dc252daee7e9d8b45be1dda23cf55a7/b04e4/avni-autopilot.png\" srcset=\"/static/3dc252daee7e9d8b45be1dda23cf55a7/01e7c/avni-autopilot.png 512w,\n/static/3dc252daee7e9d8b45be1dda23cf55a7/b04e4/avni-autopilot.png 888w\" sizes=\"(max-width: 888px) 100vw, 888px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n    </span>\n    <figcaption class=\"gatsby-resp-image-figcaption\">Avni Autopilot panel with a drop zone to upload the scoping/modelling specification document</figcaption>\n  </figure>\n    </div>\n    <div style=\"flex: 1; min-width: 250px;\">\n        <p style=\"font-size: 14px; color: #0066cc; font-weight: 600; margin: 0 0 8px 0;\">From specification to working app</p>\n        <p style=\"margin: 12px 0; line-height: 1.8;\">Upload a specification document and Autopilot builds the app configuration for you &#x2014; entities (subject types, programs, encounter types), forms, visit-schedule rules, form-element rules from the values in the document, and all form-level rules from the specification or via chat.</p>\n        <p style=\"margin: 12px 0; line-height: 1.8;\">Conversational follow-ups fill in the gaps &#x2014; and Autopilot is now your single assistant for everything, answering general questions about Avni that the older chat assistant used to handle.</p>\n        <p style=\"margin-top: 16px; font-size: 13px; color: #0066cc; font-weight: 600; display: flex; align-items: center; gap: 6px;\">&#x2192; View technical details</p>\n    </div>\n</div>\n</a>\n<div style=\"border: none; height: 2px; background: linear-gradient(90deg, transparent, #e0e0e0, transparent); margin: 40px 0;\"></div>\n<h2>Configurable visibility for the auto-populated Visit Date</h2>\n<a href=\"https://github.com/avniproject/avni-client/issues/1971\" target=\"_blank\" style=\"text-decoration: none; color: inherit; display: block; transition: all 0.3s ease;\" onmouseover=\"this.style.opacity=&apos;0.95&apos;; this.style.transform=&apos;translateY(-2px)&apos;; this.style.boxShadow=&apos;0 8px 24px rgba(0,102,204,0.15)&apos;;\" onmouseout=\"this.style.opacity=&apos;1&apos;; this.style.transform=&apos;translateY(0)&apos;; this.style.boxShadow=&apos;none&apos;;\">\n<div style=\"display: flex; gap: 40px; align-items: center; padding: 40px; margin-bottom: 20px; cursor: pointer; background: #ffffff; transition: all 0.3s ease;\">\n    <div style=\"flex: 1; min-width: 250px;\">\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: 888px; \">\n      <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 44.7265625%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABFklEQVQoz42S626EIBCF9/2fp3+bPkL7rzVpXLwteNcVXfB2OmC0tl03nWQCBPg4c4aT1j3GcUSSpuBCgHOBOE7sWJalnUdRBEF7jZQwMc8zjuK0Ai+cg7mf8JkL98zg+4GFnRkD8zx8OA6yLP8fcCCgibAawa/Lhu6Xh0xe63q7YGBr3oMvwGEBPr0WeH6vMdwaUubbsvM8t9A9ZA8/LHl37M+hiS5O07QBuraFbJpHCge7iC6CmpNBkvnGuzAMrbfrmJFaPwhQVRV6rY+B3wpnm/OPkpaVeUQTZC3/Ycmbh28lXhyJUUlSEiKlr2SUCRGjKAr01Kh9Y+4qVEpvCt3kBi9TZNoAST4ppdB1HVrK310+UvgFN7i8wDw0zKkAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"Settings screen with the Hide Visit Date toggle turned on\" title=\"Settings screen with the Hide Visit Date toggle turned on\" src=\"/static/ac13448845d1f186205949a152b84c2f/b04e4/visitdate-visibility.png\" srcset=\"/static/ac13448845d1f186205949a152b84c2f/01e7c/visitdate-visibility.png 512w,\n/static/ac13448845d1f186205949a152b84c2f/b04e4/visitdate-visibility.png 888w\" sizes=\"(max-width: 888px) 100vw, 888px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n    </span>\n    <figcaption class=\"gatsby-resp-image-figcaption\">Settings screen with the Hide Visit Date toggle turned on</figcaption>\n  </figure>\n    </div>\n    <div style=\"flex: 1; min-width: 250px;\">\n        <p style=\"font-size: 14px; color: #0066cc; font-weight: 600; margin: 0 0 8px 0;\">Hide or lock the Visit Date</p>\n        <p style=\"margin: 12px 0; line-height: 1.8;\">The Visit Date field, auto-populated on encounters, can now be configured per Encounter Type in App Designer &#x2014; <strong>hideVisitDate</strong> to hide it from the form, and <strong>visitDateNonEditable</strong> to keep it read-only. In both cases, the date is still captured and saved in the background.</p>\n        <p style=\"margin-top: 16px; font-size: 13px; color: #0066cc; font-weight: 600; display: flex; align-items: center; gap: 6px;\">&#x2192; View technical details</p>\n    </div>\n</div>\n</a>\n<hr>\n<h2>Minor enhancements</h2>\n<div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 20px;\">\n<div style=\"padding: 20px; border: 1px solid #e5e7eb; border-radius: 8px;\">\n<p style=\"font-weight: 700; margin: 0 0 8px 0;\">Group member selection respects form element rules</p>\n<p style=\"margin: 0; line-height: 1.7; color: #374151; font-size: 14px;\">\"Display all group members\" now respects the form element rule when selecting many subjects at once, on both the mobile app and the Data Entry App. (<a href=\"https://github.com/avniproject/avni-client/issues/2003\" target=\"_blank\" style=\"color: #0066cc; font-weight: 500;\">avni-client#2003</a>)</p>\n</div>\n<div style=\"padding: 20px; border: 1px solid #e5e7eb; border-radius: 8px;\">\n<p style=\"font-weight: 700; margin: 0 0 8px 0;\">Target Android 16</p>\n<p style=\"margin: 0; line-height: 1.7; color: #374151; font-size: 14px;\">The app now targets Android 16 (API level 36), meeting the Play Store's target API level mandate. (<a href=\"https://github.com/avniproject/avni-client/issues/2017\" target=\"_blank\" style=\"color: #0066cc; font-weight: 500;\">avni-client#2017</a>)</p>\n</div>\n<div style=\"padding: 20px; border: 1px solid #e5e7eb; border-radius: 8px;\">\n<p style=\"font-weight: 700; margin: 0 0 8px 0;\">Flash forced on during photo capture</p>\n<p style=\"margin: 0; line-height: 1.7; color: #374151; font-size: 14px;\">Photo capture now forces the flash on, blocking capture if the flash is unavailable or fails.</p>\n</div>\n</div>\n<hr>\n<h2>Performance improvements</h2>\n<div style=\"padding: 0 0 20px 0; background: #ffffff;\">\n    <p style=\"font-weight: 700; margin: 12px 0 8px 0;\">Bulk location uploads no longer stall the job queue</p>\n    <p style=\"margin: 12px 0; line-height: 1.8;\">A locations bulk upload could wedge the shared background job worker for hours, stalling every queued CSV import, bundle upload, and export behind it. A 200-empty-column file that previously took 79 seconds now completes in 2.1 seconds. (<a href=\"https://github.com/avniproject/avni-product/issues/1897\" target=\"_blank\" style=\"color: #0066cc; font-weight: 500;\">avni-product#1897</a>)</p>\n</div>\n<hr>\n<h3>Share Feedback and Stay Updated!</h3>\n<p>Join our <a href=\"https://discord.gg/VRZQYdcyuG\">Avni community on Discord</a> to share your thoughts, ask questions, and get the latest updates.</p>\n<p>Need a walkthrough or have questions? Feel free to <a href=\"https://avniproject.org/\">schedule a demo call here</a>.</p>","frontmatter":{"date":"August 31, 2026","title":"Avni August Release","author":"Avni Team","description":"Build an app from a spec with AI Autopilot, configurable Visit Date visibility, and a fix for the bulk upload job that could stall your whole queue. Here's what changed.","tags":["release"],"image":null},"fields":{"slug":"/blog/2026-08-31-august-release/"}}},"pageContext":{"id":"4b4d753a-0413-5aa6-82c5-7061c562f181"}},"staticQueryHashes":["1175525803","4080856488"]}