Release Notes

See what's new in NavEd. Product updates, new features, and improvements for micro school, co-op, and homeschool management.

182 releases
Page 5 of 17
v2026.3.27.2

HODs can now see payment details and issue refunds from the form response page.

When viewing a form submission that included a payment, HODs see the full payment breakdown: amount charged, net to school, card used, payer info, and timestamp. A refund button opens a confirmation modal showing the amount and parent name. Confirming the refund processes it through Stripe, reversing both the transfer to the school and NavEd's platform fee. Parents receive automatic email receipts from Stripe after successful payments.

What's New

  • Payment status badge on form response detail (Paid, Refunded, Failed, Disputed, etc.)
  • Full payment breakdown with payer identity and card details
  • One-click refund with confirmation modal
  • Automatic Stripe receipt emails for parents

v2026.3.27.1

Payment webhooks now drive the complete payment lifecycle.

Stripe Connect webhook handlers now process all payment events: successful checkout, expiration, failure, refunds, disputes, and payouts. Each successful payment creates an immutable PaymentTransaction record with a full fee breakdown. Form submissions automatically transition through the correct statuses as events arrive. Parents can retry failed or expired checkouts.

Under the Hood

  • PaymentTransaction model with fee breakdown, payer identity, card details, refund/dispute tracking
  • 8 new Stripe Connect webhook handlers for the complete payment lifecycle
  • FormSubmission extended with failed, expired, refunded, and disputed statuses
  • StripeConnectAccount payout tracking fields

Fixes and Improvements

  • Staff: fixed crash caused by Django FK descriptor zeroing out admin_id in memory for orphaned records (Sentry #7288969155)
  • Staff: added defensive template guards so orphaned staff records display instead of crashing the page
  • Staff: orphaned records now log a warning for visibility without breaking the user experience

v2026.3.25.2

Parents can now pay for forms with Stripe Checkout.

When a school adds a payment field to a form, parents filling it out see a live payment summary with line items, quantities, and fee breakdown that updates as they change values. Clicking "Submit & Pay" saves their responses and redirects to Stripe's secure checkout page. After payment, they land on a confirmation page showing their itemized order, fees, total, and card details. If they abandon checkout, they see a banner with options to retry payment or cancel their submission. Each parent can only submit once per form.

What's New

  • Payment summary section on forms with dynamic totals that update as quantities change
  • Submit & Pay button with full-page overlay during Stripe redirect
  • Payment confirmation page with order summary, fee breakdown, and card last 4 digits
  • Abandoned checkout retry and cancel flows
  • Parent name and email auto-filled from their account
  • 12 integration tests covering the complete payment flow

v2026.3.25.1

Payment checkout foundation added for parent form submissions.

Building toward the parent checkout experience. This update adds payment state tracking to form submissions so we can follow each payment through its lifecycle -- from draft to payment pending to confirmed to complete. It also adds the backend service that will create Stripe Checkout Sessions when parents submit payment forms, with destination charges that route funds directly to the school's connected Stripe account.

Under the Hood

  • Added payment state tracking to form submissions (draft, payment_pending, payment_confirmed, complete)
  • Created CheckoutService for Stripe Checkout Session creation with destination charges
  • Added parent-facing fee preview endpoint for real-time fee calculations during form fill
  • Extended form submission service to support draft status for payment forms
  • 19 tests covering state machine transitions, Stripe API mocking, and fee calculations

v2026.3.24.2

Payment field configuration UI added to the form builder.

Schools can now add a Payment field type when building forms. The Payment field includes a line items editor where you can set item labels, prices, and optionally link quantities to number fields on the same form. Fee handling is configurable with three modes -- School Absorbs Fees, Pass Fees to Parent, or let Parents Optionally Cover Fees -- with automatic enforcement of state surcharge laws. A live fee preview shows exactly how much Stripe and NavEd fees will be for any configuration.

Under the Hood

  • Added Payment field type to form builder with line item management (add, edit, delete, drag-to-reorder)
  • Added fee mode selection with radio cards and live fee preview calculations
  • Added surcharge law enforcement that disables restricted fee modes for CA, CT, MA, ME
  • One payment field per form enforced with inline messaging
  • 31 tests covering all AJAX endpoints, access control, and business rule validation

v2026.3.24.1

Payment field configuration models and fee calculation engine added.

Continuing the foundation for school payment collection. This update adds the data models that let schools configure payment fields in their forms -- including line items with prices and fee mode settings (who pays processing fees). It also adds the fee calculation service that computes Stripe and NavEd fee breakdowns with penny-perfect Decimal math, and enforces surcharge laws for states like California and Connecticut that prohibit passing credit card fees to customers.

Under the Hood

  • Added PaymentFieldConfig and PaymentLineItem models for form payment configuration
  • Added "Payment" as a new field type in the form builder
  • Created fee calculation service with Decimal arithmetic for Stripe (2.9% + $0.30) and NavEd (1%) fees
  • Added surcharge law enforcement for CA, CT, MA, and ME

v2026.3.23.1

Foundation work for school payment collection is underway.

We're building the infrastructure that will allow schools to collect payments from parents directly through NavEd. This update adds the database models and service layer needed to connect schools with Stripe, the payment processor we use. No user-facing changes yet -- this is the groundwork for the full payment collection feature coming soon.

Under the Hood

  • Added Stripe Connect account tracking for schools
  • Added webhook event deduplication to prevent double-processing of payment events
  • Created Connect service layer for Stripe API interactions

v2026.3.19.5

NavEd now stays online during brief infrastructure hiccups — even when the database is momentarily unreachable.

Occasionally, our hosting provider performs brief maintenance on the database connection layer. When this happened, every page — including the system health check that tells our servers "yes, NavEd is still running" — would fail. This could cause our hosting platform to mistakenly think NavEd had crashed and restart it unnecessarily, extending the downtime.

We've restructured how NavEd handles these brief interruptions. The health check now responds independently, so even during a momentary database blip, your servers stay running and recover instantly once the connection is restored. We also eliminated unnecessary database lookups when loading stylesheets, icons, and other static files — so those assets load faster and aren't affected by database hiccups at all.

Fixes and Improvements

  • Health check endpoint now survives database proxy outages without triggering unnecessary server restarts
  • Static files (CSS, JavaScript, images) no longer require a database connection to load
  • Added structured logging to help us detect and diagnose infrastructure outages faster

v2026.3.19.4

The Gradebook page is now more resilient and significantly faster when loading assignment statistics.

When you open the Gradebook tab for a subject, NavEd calculates the highest, lowest, and average grade for each assignment. Previously, each of those calculations was triggering dozens of unnecessary individual database lookups — one for every student result, just to check a setting on the subject. For a class with 10 assignments and 20 students, that could mean over 600 tiny database calls on a single page load.

We've optimized all three grade statistic methods to load the data they need in a single efficient query per assignment. This dramatically reduces the number of database calls, makes the page load faster, and eliminates a rare crash that could occur if the database connection was briefly interrupted during the long chain of lookups.

Fixes and Improvements

  • Gradebook: eliminated N+1 query pattern in assignment highest/lowest/average grade calculations
  • Gradebook: pre-loads subject data to avoid redundant lookups per assignment
  • Applies to both the Subject Overview and standalone Grades views

v2026.3.19.3

Removed a diagnostic check that was generating occasional background errors.

A debug session-verification query in our middleware was occasionally failing due to database connection timing during high-traffic moments. The query was leftover diagnostic code from a resolved session persistence investigation and served no functional purpose — sessions have been saving correctly all along.

We've removed the unnecessary verification step, which eliminates the background error and shaves one redundant database query off every HTTP response.

Fixes and Improvements

  • Removed stale session-persistence diagnostic query from debug middleware (Sentry #7276789284)
  • Net reduction: one fewer EXISTS query per HTTP response in production

v2026.3.19.2

Improved error filtering for transient Railway proxy disruptions during page loads.

When Railway's database proxy briefly disconnects during infrastructure maintenance, some page loads (like the subject overview) were generating error reports wrapped in generic exception messages. Our error filter couldn't recognize these wrapped errors, creating noise in our monitoring. We've extended the filter to detect Railway proxy errors even when they're wrapped by application-level exception handling, and improved the exception handling in grade calculation methods to preserve the original error type for better diagnostics.

Fixes and Improvements

  • Extended Sentry before_send filter to catch Railway proxy errors wrapped in generic Exceptions (Sentry #7346911310)
  • Improved exception handling in 4 grade calculation methods to preserve original error types using raise type(e)(...) from e
  • Added 4 new regression tests for wrapped-exception filtering

v2026.3.19.1

Reduced background noise in error monitoring from transient Railway infrastructure events.

Occasionally, Railway's database proxy goes through brief unavailability windows during infrastructure maintenance. Our background task worker was dutifully reporting these connection timeouts to our error tracker, even though it automatically recovers within seconds every time. These transient errors were creating noise that made it harder to spot real issues.

We've added a targeted filter that recognizes Railway proxy connectivity errors and suppresses them from our error feed, while continuing to surface any genuine database errors. The background worker's self-healing behavior is unchanged — tasks continue to be retried and caught up automatically.

Fixes and Improvements

  • Added Sentry before_send filter for transient Railway proxy OperationalErrors
  • 8 new regression tests to ensure the filter only suppresses infrastructure noise

v2026.3.18.2

Fixed stale field names in subject grades tab tests.

The subject grades tab test suite (test_subject_grades_tab.py) was referencing multiple fields that were renamed in past migrations (subject_namename, academic_gradeacademic_grade_id, session_yearsession_year_id). This fix updates all stale references to use the current model field names.

Fixes and Improvements

  • Updated test_subject_grades_tab.py to use current model field names across Subject, Student, StudentSubject, AcademicGrade, and Parent model creation calls
  • Fixed URL reverse name from subject_overview to subject-overview
  • Added missing required school FK to Subject, Student, and Parent creation calls

v2026.3.18.1

Fixed stale field name in weekly digest tests.

The admin weekly digest test suite was referencing a field (subject_name) that was renamed to name long ago. This fix updates 7 test references to use the correct field name, preventing test failures.

Fixes and Improvements

  • Updated test_admin_weekly_digest.py to use the current Subject.name field instead of the legacy subject_name

Want to stay updated?

Sign up for NavEd to get notified about new features and improvements

Get Started Free