Get in touch

9io.ai / Blog

Edtech app development: what we learned building an AI study platform

Edtech app development lessons from an AI study platform we build and run, and the privacy, AI Act and accessibility rules to settle at kickoff.

Key takeaways

  • On our AI study platform, most problems came from timing or from failures that looked like success.
  • A course build reported 0 dropped while shipping 26 of 51 planned diagrams, so compare planned with shipped.
  • Our study assistant’s time to first word went from 20 to 30 seconds to about 3.2 seconds.
  • The amended COPPA Rule’s compliance date was 22 April 2026; India’s parental-consent rule starts in May 2027.
  • EU high-risk rules for AI that evaluates learning outcomes in institutions apply from 2 December 2027.

Most of what went wrong in edtech app development on the AI study platform we build and run was about timing, or about failures that looked like success. A course pipeline reported 0 dropped while it shipped 26 of the 51 diagrams it had planned. The voice tutor’s code ended its turn while the student could still hear it. The in-app assistant took 20 to 30 seconds to start answering, and now takes about 3. Before any code, a new edtech product has to settle who its users are and who controls their data, because children’s privacy law shapes sign-up, consent and retention.

9io has kicked off products in healthcare, ecommerce, edtech and fintech. This post is about the edtech one. It gathers our nine published field notes from building it, with the problem, decision and number from each.

It starts with the privacy, AI and accessibility rules to settle at kickoff, as of 14 October 2026. Those sections are an engineering reading to help plan the work. They are not legal advice.

The six areas at a glance

Area What went wrong What we changed Number
Course engine Cosine similarity couldn’t separate duplicate topics from neighbours Two rules decide merges 0 wrong merges on 13 real pairs
Content pipeline Throttled work was dropped and never counted A shared limiter and a retry budget for 429s 26 of 51 diagrams shipped, 0 reported dropped
Voice tutor Turns ended when generation finished Turns end when the audio drains Generation finished 3 to 4 times sooner than playback
Assistant latency Three slow steps before the first word Known context goes into the prompt 20 to 30 s down to about 3.2 s
Assistant grounding A web mode never searched Every point needs a search result Flash-Lite wrote from memory 1 time in 4 before that
Web platform Problems seen only in production Public routes skip the loading gate Home page HTML text from 1,358 to 13,244 characters

Student data privacy rules to settle at kickoff

If your users include children, privacy law decides how sign-up works, who may consent and what you may do with the data. Dates below are as of 14 October 2026.

Law Who counts as a child What it asks of an edtech product Dates
COPPA Rule (US), as amended Under 13 Parental consent, separate consent for third-party disclosure, a written security programme and retention policy Effective 23 June 2025, compliance by 22 April 2026
FERPA (US) Covers students’ education records A vendor acts as a “school official” under the school’s direct control In force
Age Appropriate Design Code (UK) Under 18 15 standards, including high-privacy default settings In force
DPDP Act and Rules (India) Under 18 Verifiable parental consent before any of a child’s data is processed Consent rule applies from May 2027

COPPA applies to services directed to children under 13, and to operators that know they are collecting a child’s personal information. The amendments were published in the Federal Register on 22 April 2025 and gave regulated entities until 22 April 2026 to comply, apart from some safe-harbour provisions. They also bar keeping a child’s data indefinitely. The FTC left out its proposed edtech amendments to avoid a clash with possible FERPA changes, and said it would keep enforcing COPPA in edtech under its existing guidance.1 Under that guidance a school can consent for parents only when the data is collected for the use and benefit of the school, and for no other commercial purpose.2

FERPA lets a school share education records with a vendor without parental consent when the vendor counts as a “school official”. The vendor must perform a service the school would otherwise use employees for, and be under the school’s direct control for the use and maintenance of the records. It may use them only for the purposes they were shared for, and may not pass them on without consent.3 Analytics or model training on those records has to fit that purpose.

The UK’s Age Appropriate Design Code sets 15 standards for online services likely to be accessed by under-18s.4 It doesn’t apply to schools. It does cover edtech that children use directly, and services provided through schools where the provider influences how and why children’s data is processed. A provider that uses children’s data for its own purposes, product development included, is a controller for that processing.5 In audits of 28 edtech providers in 2024 and 2025, the ICO found many hadn’t correctly identified their role, especially when they used children’s information for product development or analytics.6

India’s DPDP Act defines a child as anyone under 18 and requires a parent’s verifiable consent before any of a child’s personal data is processed. Breaching its duties on children’s data can cost up to ₹200 crore.7 Rule 10 of the DPDP Rules, published in the Gazette of India on 13 November 2025, sets out the method. The service has to check that the person consenting is an identifiable adult, using identity and age details it already holds, details the parent provides, or a token from an authorised entity. Rule 10 comes into force 18 months after publication, in May 2027.8

Rules for AI in education and for accessibility

The EU AI Act treats some uses of AI in education as high-risk. Annex III lists systems that decide admission to educational institutions, and systems that evaluate the learning outcomes of people in them, including when those outcomes steer their learning.9 An AI tutor that a school uses to mark work and pick the next lesson comes close to that description, so it deserves a lawyer’s reading. Article 6(3) lifts the label from some systems, such as those that only perform a narrow procedural or preparatory task, although a system that profiles people stays high-risk.10 The AI Omnibus, in force since 27 July 2026, moved the date these rules apply to 2 December 2027.1112

Since 2 August 2026, an AI system that talks to people in the EU has had to tell them it is an AI, unless that is obvious.13 Most US state chatbot laws start in 2027, and most add safeguards for minors. We mapped them in a separate post.

The US Department of Justice’s ADA Title II rule requires state and local governments, including public schools, community colleges and public universities, to meet WCAG 2.1 Level AA in their web content and mobile apps. That includes content they provide through arrangements with vendors.14 An interim final rule of 20 April 2026 moved the compliance dates to 26 April 2027 for public entities with a population of 50,000 or more, and to 26 April 2028 for smaller ones and special district governments. The standard itself didn’t change.15

An AI course generator that has to quote its sources

The course engine turns a set of textbook PDFs into an interactive course, with explanations, diagrams, simulations, flashcards and quizzes in each section. Its first version read only the first 40 pages, or built the course from one book and ignored the others, and nothing raised an error. It now reads every page of every book, at about 4 ms a page with PyMuPDF in our runs. Each topic in the outline names its page range and carries a quote that has to appear on those pages.

Deciding which topics to merge was harder. With OpenAI’s text-embedding-3-large, distinct but similar topics scored 0.67 to 0.91 on cosine similarity, and rewordings of one topic scored 0.70 to 0.94, so no threshold separates the two. Two rules now decide merges, one comparing the verbs of the learning objectives and one catching pairs that differ by a word or two. They made no wrong merges on a set of 13 real pairs and refused one merge in a set of 25. An earlier guard against merges with a rare word on one side only refused 16 of 18 true duplicates, so we deleted it (course engine field note).

LLM content pipelines that fail silently

One build planned 51 diagrams and shipped 26, planned 44 simulations and shipped 13, and put flashcards and quizzes on 7 of 36 sections. Its report said 0 dropped. A concurrency limiter was created per call, so every module ran its own and they all hit one model deployment at once. The 429 responses came when the work had no deadline left to retry in, and work given up that way never reached a counter.

Each worker process now creates its limiter once and shares it across modules, and 429s retry from a time budget of their own. The rule we kept is to compare planned with shipped output on every build, which finds a gap whatever caused it. An LLM judge in another run left 27 of 35 sections unreviewed, so its time budget went from 90 s to 420 s. In one build, 187,152 of 572,209 output tokens were reasoning and 49,544 were prose that shipped, so mechanical steps now run at low reasoning effort. In the build after the fixes, 33 of 33 sections reached full length, against 18 of 38 before (pipeline field note).

A voice AI tutor app where the bugs were about timing

Our voice tutor answers students out loud and draws on a whiteboard as it talks. Versions 1 and 2 ran on OpenAI’s Realtime API over WebRTC. Version 3 runs on GPT-Live 1, which delegates to a server-side teaching model that answers each hand-off with a validated JSON scene of what to draw.

Only one response can write to the default Realtime conversation at a time, and six places in our code sent response.create without checking, so every request now goes through one guarded function. response.done arrived three to four times sooner than the audio finished playing, and the tutor ended its turn while the student was still listening. Turns now end on output_audio_buffer.stopped, which the server sends once the audio has drained. The tutor once chained 5 visuals in 15 seconds, and the cap of 10 visuals per lesson we added then ended lessons after about 3 minutes, so pacing and lesson length need separate limits. In version 3 the voice goes silent until each hand-off is answered, and in one case a single question was answered four times. If you are working out how to build an AI tutor with voice, start with the voice tutor field note.

A study assistant that starts in about 3 seconds and shows its sources

The assistant in the platform’s side panel took 20 to 30 seconds to start answering, because each turn chained three slow steps. A forced tool call fetched context, that tool waited on a round trip to the browser for the page and the student’s selection, and then the course content was read. Now the page, the highlighted passage, the skill the student chose and the course text go straight into the instructions. Tools are forced only for real actions, and reasoning effort is low. First text appears at about 3.2 seconds and the first byte at about 0.8 seconds (time to first word field note).

A web-sources mode never searched, and a deep research path swallowed a quota error from its provider, so both gave fluent answers with no research behind them. The assistant now uses Google Search grounding in the Gemini API. The model decides for itself whether to search, so only the grounding metadata shows whether it did. Gemini Flash-Lite still wrote research from memory in 1 answer out of 4 until the prompt required a search result behind every point. For questions about the course itself, the whole course goes into the context up to 60k tokens, with BM25 search above that. That mode answered 8 of 8 fact questions correctly in 3.5 to 6.5 s, at about $0.018 a question, and an older, stricter prompt had refused 6 of 24 on-topic questions (grounding field note).

The web platform underneath

The public pages returned 200 with full head tags, yet the server HTML of every route was the same loading screen of about 1 KB. The cause was redux-persist’s PersistGate, which renders its loading fallback on the server. After we replaced it with a gate that lets public routes render at once, the home page’s server HTML went from 1,358 to 13,244 characters of visible text (empty HTML field note).

The Next.js backend-for-frontend runs on AWS Amplify Hosting, where three limits appeared only in production. JSON responses over about 6 MB came back as an empty 413, so the proxy now gzips JSON over 512 KB, which took a 9 MB response to about 2 MB. URLs over CloudFront’s 8,192-byte limit got a 414. And request.nextUrl reported localhost:3000, so an origin check rejected every write until it took the public origin from configuration or forwarded headers (proxy limits field note).

Other bugs appeared only some of the time. A network probe that ran on import leaked into the fetch mocks of 31 test files, and removing it took the suite from 1 failing run in 6 to 0 in 6. Chat timestamps with no timezone sorted correctly only on machines set to UTC, so timestamps are now timezone-aware UTC end to end. Each getByRole query in jsdom cost 100 to 250 ms (intermittent bugs field note).

The platform’s animation also ships as transparent video clips, and Chrome’s WebCodecs VideoEncoder rejects alpha. We encode colour and alpha as two VP9 streams in WebM with a small hand-written muxer, at 186 KB to 1.08 MB per 640×640 clip. Safari drops VP9 alpha, so Safari users see the animation as live SVG (transparent WebM field note).

Where the numbers come from

Every platform number comes from the nine field notes, each of which explains how it was measured. The samples are small and from one system. The grounding test used 8 questions, the merge rules were checked on sets of 13 and 25 pairs, and the probe fix rests on six runs before and six after. Latencies are ranges or single production figures, with no percentiles.

A kickoff checklist for edtech app development

Whether you build in-house or hire an education app development company, these are the things we’d settle first on the next build.

  • Know your users’ ages and countries. Under 13 brings in COPPA in the US, and under 18 brings in the UK code and India’s DPDP Act.
  • Decide whether you sell to schools. That means school-official terms under FERPA and, in the UK, a clear answer on processor or controller.
  • Design parental consent before sign-up, including separate consent for any disclosure to third parties.
  • Write the security programme and retention policy that the amended COPPA Rule requires.
  • Keep student data out of product development until your role and contracts allow it.
  • Map each AI feature against Annex III, and show an AI notice on every conversational surface.
  • Build to WCAG 2.1 AA from the first screen if US public schools are buyers.
  • Compare planned with shipped output on every content build, and fail research answers that have no sources.
  • Give response.create one owner, end voice turns when the audio stops, and put context the server already has into the prompt.
  • Test on a preview of the real host, and read the raw HTML of your public pages.

  1. Federal Trade Commission, “Children’s Online Privacy Protection Rule”, Federal Register, 22 April 2025, https://www.govinfo.gov/content/pkg/FR-2025-04-22/html/2025-05904.htm ↩

  2. Federal Trade Commission, “Complying with COPPA: Frequently Asked Questions”, section N, https://www.ftc.gov/business-guidance/resources/complying-coppa-frequently-asked-questions ↩

  3. US Department of Education, FERPA regulations, 34 CFR 99.31(a)(1)(i)(B) and 99.33(a), https://studentprivacy.ed.gov/ferpa ↩

  4. Information Commissioner’s Office, “Introduction to the Children’s code”, https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/childrens-information/childrens-code-guidance-and-resources/introduction-to-the-childrens-code/, and “Code standards”, https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/childrens-information/childrens-code-guidance-and-resources/age-appropriate-design-a-code-of-practice-for-online-services/code-standards/ ↩

  5. Information Commissioner’s Office, “The Children’s code and education technologies (edtech)”, last updated 30 May 2023, https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/childrens-information/childrens-code-guidance-and-resources/the-children-s-code-and-education-technologies-edtech/ ↩

  6. Information Commissioner’s Office, “Edtech examined: key findings from our audits”, https://ico.org.uk/media2/13yfm55z/edtech-examined-key-findings-from-our-audits.pdf, and “ICO statement on ‘Edtech examined’ report”, 24 June 2026, https://ico.org.uk/about-the-ico/media-centre/news-and-blogs/2026/06/ico-statement-on-edtech-examined-report/ ↩

  7. Government of India, “The Digital Personal Data Protection Act, 2023”, section 2(f), section 9 and the Schedule, https://www.meity.gov.in/static/uploads/2024/06/2bf1f0e9f04e6fb4f8fef35e82c42aa5.pdf ↩

  8. Ministry of Electronics and Information Technology, “Digital Personal Data Protection Rules, 2025”, G.S.R. 846(E), Gazette of India, 13 November 2025, rules 1 and 10, https://www.meity.gov.in/static/uploads/2025/11/53450e6e5dc0bfa85ebd78686cadad39.pdf ↩

  9. European Commission, AI Act Service Desk, “Annex III”, point 3, https://ai-act-service-desk.ec.europa.eu/en/ai-act/annex-3 ↩

  10. European Commission, AI Act Service Desk, “Article 6”, https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-6 ↩

  11. European Commission, “AI Omnibus enters into force”, 27 July 2026, https://digital-strategy.ec.europa.eu/en/news/ai-omnibus-enters-force ↩

  12. European Commission, AI Act Service Desk, “Article 113”, consolidated text as at 27 July 2026, https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-113 ↩

  13. European Commission, AI Act Service Desk, “Article 50”, https://ai-act-service-desk.ec.europa.eu/en/ai-act/article-50 ↩

  14. US Department of Justice, “Fact Sheet: New Rule on the Accessibility of Web Content and Mobile Apps Provided by State and Local Governments”, ADA.gov, https://www.ada.gov/resources/2024-03-08-web-rule/ ↩

  15. US Department of Justice, “Extension of Compliance Dates for Nondiscrimination on the Basis of Disability; Accessibility of Web Information and Services of State and Local Government Entities”, Federal Register, 20 April 2026, https://www.govinfo.gov/content/pkg/FR-2026-04-20/html/2026-07663.htm ↩

Frequently asked questions

How do you build an AI tutor app with voice?

Get the timing right first. In our voice tutor the model finished generating three to four times sooner than the audio finished playing, so turns now end when playback stops, and one function sends every response request. Drawing speed and lesson length need separate limits.

What does COPPA compliance for apps require after the 2025 amendments?

Verifiable parental consent for children under 13, separate consent before their data is disclosed to third parties unless that is integral to the service, and a written security programme and retention policy. Regulated entities had until 22 April 2026 to comply.

Can a school give COPPA consent for parents?

Only in the educational context. The FTC’s guidance says a school can consent for parents when an operator collects students’ information for the use and benefit of the school, and for no other commercial purpose.

Can an edtech company access student records under FERPA?

Yes, as a school official, if it performs a service the school would otherwise use employees for, is under the school’s direct control for the use and maintenance of the records, and uses them only for the purposes they were disclosed for.

Is an AI tutor high-risk under the EU AI Act?

It can be. Annex III lists AI that evaluates the learning outcomes of people in educational institutions, including when the results steer their learning. Those rules apply from 2 December 2027, and Article 6(3) exempts some narrow or preparatory tasks, although a system that profiles people stays high-risk.

Work with us

Building something like this?

9io is a small team of senior engineers with a fractional CTO. We work by the hour, and plans start at $5,000. Send us a note about your product. The reply comes from the person who'd do the work.