Commit Graph
190 Commits
Author SHA1 Message Date
adminandClaude Opus 5 9d7d18669d Add 504 / IEP plans with tiered confidentiality
Plans, accommodations, related services, annual goals with progress
monitoring, meetings/team, and signed documents — plus a compliance
list and dashboard alerts for annual-review and triennial re-evaluation
dates (overdue in red, due-within-30-days in amber).

Access is tiered because special-education records are need-to-know
under FERPA:

  FULL  admin, the plan's case manager, the student's parents
  IMPL  the above, plus any teacher of the student — accommodations
        and services only, never eligibility or meeting notes

RLS is row-level and every app role is the same Postgres role
(`authenticated`), so column grants cannot separate the tiers. The
split is therefore physical: confidential fields live in plan_details,
plan_goals, plan_meetings and plan_documents rather than as columns on
student_plans.

The UI asks the database which tier applies via the same predicates the
policies use (can_view_plan_full / can_edit_plan) instead of re-deriving
the rules client-side.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 09:14:40 -04:00
adminandClaude Opus 4.8 872eacefc5 Read profile date inputs from the DOM at save (Safari-proof)
Safari doesn't reliably fire onChange for native date pickers, so read dob/
start/agreement dates directly from the input refs when saving.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:01:55 -04:00
adminandClaude Opus 4.8 e95171a0d4 Make remaining date inputs Safari-safe (uncontrolled)
Attendance filter, gradebook assignment date, and tuition entry date now use
defaultValue (with a remount key where the field resets after submit).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:46:33 -04:00
adminandClaude Opus 4.8 d3c9c71564 Brand with Bayside Academy navy + logo
- Theme primary -> Bayside navy (#06315a) in light & dark, sidebar + focus ring
- Bayside logo in the sidebar, login page, and public intake header
- Login title -> Bayside Academy

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:42:19 -04:00
adminandClaude Opus 4.8 471d31cee6 Fix dates not saving on Safari; show grade level under student name
Safari's native <input type="date"> gets reset by React's controlled value,
so picked dates never reached state. Make date inputs uncontrolled
(defaultValue + onChange) in the profile, academics, and public intake forms.
Header now shows grade level instead of a single class.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:37:07 -04:00
adminandClaude Opus 4.8 90e3c2c188 Add admin-emailed one-time intake links
- intake_tokens table (server-only via service role)
- Server functions: createIntakeToken (admin), getIntakeToken (public validate),
  submitIntake (public write + mark used, 14-day one-time tokens)
- Public /intake/$token full intake form (no login) with valid/used/expired states
- Student profile (admin): generate link, copy, and email-to-parent (mailto)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 18:00:39 -04:00
adminandClaude Opus 4.8 eb94c7ec34 Fix student profile dates not saving
Native date pickers blur/refocus the window, which triggered a React Query
refetch mid-edit and wiped the in-progress date. Disable refetchOnWindowFocus,
and make profile/academics edits work on a snapshot with functional state
updates so a background refetch can't clobber input.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 17:50:53 -04:00
adminandClaude Opus 4.8 8880d7a805 Lock student profile editing to admins only
Parents and teachers are now view-only on student data (profile, guardians,
pickups, curriculum logins). Writes restricted to admins in RLS and the UI;
read access unchanged. Portal logins for parents/students are view-only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 17:32:45 -04:00
adminandClaude Opus 4.8 9020b214f3 Fix empty class dropdown on Attendance for admins
The classes query filtered by teacher_id when isAdmin was momentarily false
(roles not yet loaded) and never refetched — cache key lacked isAdmin. Gate on
!loading and include isAdmin in the query key.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 17:11:25 -04:00
adminandClaude Opus 4.8 8fe6ad00f4 Gradebook: classes, weighted grading, assignments, grades, student role
- Migration: student role, students.user_id, grade_categories/grade_scale
  (school defaults + per-class override), assignments, grades + RLS
- Classes area (nav): list/create classes, class page with Gradebook / Roster /
  Grading setup tabs; teachers see their classes, admins all
- Weighted-category grade calc -> letter scale (shared helper)
- Roster assignment (admin), assignment + grade entry (teacher/admin)
- Student profile: view-only Grades tab (parents/students)
- Portal access: create parent OR student logins linked to the student

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:57:27 -04:00
adminandClaude Opus 4.8 73a4e70f0b Parent hand-off: admin creates parent/teacher accounts + portal edit
- Admin server function (service-role) to create accounts, set role, and
  optionally link a parent to a student; wired via env_file (.env.secret)
- Admin > Users: "Add a user" form (teacher/parent/admin) with one-time temp password
- Student profile > Family: "Parent portal access" — create + link a parent login
- Parents can now edit their own child's profile (RLS-scoped); internal notes stay admin-only

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:30:56 -04:00
adminandClaude Opus 4.8 894b0722e0 Student profile: read-only view by default, Edit button to edit
Profile / Family & pickup / Academics tabs now render a clean read-only
view with an Edit toggle that reveals the editable form (Save/Cancel/Done).
Guardian/pickup/login cards show summaries in view mode, inputs in edit mode.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:21:04 -04:00
adminandClaude Opus 4.8 48cf441cba Profile model: quick-create + full editable student profile
- /students/new: quick create (name + DOB) -> redirects into the profile
- /students/$id: full editable profile with photo upload, and tabs for
  Profile / Family & pickup (guardians, emergency contacts, pickups) /
  Academics (curriculum logins + records) / Attendance / Tuition / Contracts
- Migration: students.photo_path + private student-photos storage bucket
  (admin write, linked-user read); regenerate types

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:13:36 -04:00
adminandClaude Opus 4.8 9d5b11bb10 Fix blank /students/new and /students/$id (missing Outlet)
students.tsx was the list AND the parent of students.new / students.$id but
rendered no <Outlet/>, so child routes never showed. Make students.tsx an
Outlet layout and move the list to students.index.tsx. Add an errorComponent
to students.new as a safety net.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 22:42:45 -04:00
adminandClaude Opus 4.8 cee27a6189 Add full-page student intake form matching Bayside paper forms
- Migration: student intake fields (health, academic, dismissal, agreement),
  student_guardians + student_curriculum_logins tables, extend authorized_pickups
  (alt_phone, notes, kind) with RLS mirroring existing policies
- New /students/new full-page multi-section form (replaces the add dialog)
- Students list links to the full page; regenerate Supabase types

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 22:21:38 -04:00
adminandClaude Opus 4.8 f509fa6528 Wire compose to VPS Traefik (host-mode, wildcard hostname, HTTPS)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 20:14:11 -04:00
adminandClaude Opus 4.8 36d3d8526e Add Docker deploy config for VPS (node-server + Traefik)
- Dockerfile: bun build with Nitro node-server preset -> standalone Node runner
- docker-compose.yml: Traefik labels for automatic HTTPS, runtime env from .env
- .dockerignore + DEPLOY.md (Hostinger VPS: Docker + Dockge + Traefik steps)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 19:06:42 -04:00
adminandClaude Opus 4.8 45d36827d2 Migrate backend from Lovable Cloud to own Supabase (EDU project)
- Point .env + supabase/config.toml at EDU (qgmcpounpkgsjlwosjdi)
- Replace Lovable Google-OAuth shim with native supabase.auth.signInWithOAuth
- Remove src/integrations/lovable and @lovable.dev/cloud-auth-js dependency
- Drop .lovable metadata; gitignore supabase/.temp

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 18:04:18 -04:00
gpt-engineer-app[bot]andrenee-png c36d2b24e9 Update site info for publish
Edited UI in Lovable

Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:56:28 +00:00
gpt-engineer-app[bot]andrenee-png eae5ad88b0 Built school portal app
X-Lovable-Edit-ID: edt-17ee7c90-d59b-4379-9e6e-d262d1b2cabe
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:46:17 +00:00
gpt-engineer-app[bot]andrenee-png 516397c518 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:46:00 +00:00
gpt-engineer-app[bot]andrenee-png cbea663981 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:45:51 +00:00
gpt-engineer-app[bot]andrenee-png 5489371d45 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:45:30 +00:00
gpt-engineer-app[bot]andrenee-png 477e5fcdc3 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:45:23 +00:00
gpt-engineer-app[bot]andrenee-png b422766132 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:45:10 +00:00
gpt-engineer-app[bot]andrenee-png 79d124e188 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:45:02 +00:00
gpt-engineer-app[bot]andrenee-png 002f4d00f0 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:44:47 +00:00
gpt-engineer-app[bot]andrenee-png eeeae5181a Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:44:37 +00:00
gpt-engineer-app[bot]andrenee-png e094b56e1b Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:41:49 +00:00
gpt-engineer-app[bot]andrenee-png 8cf9b95cff Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:41:43 +00:00
gpt-engineer-app[bot]andrenee-png 594fb22107 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:41:37 +00:00
gpt-engineer-app[bot]andrenee-png a2a4e6c811 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:41:27 +00:00
gpt-engineer-app[bot]andrenee-png d7e7de54d3 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:40:27 +00:00
gpt-engineer-app[bot]andrenee-png 1fdd309ca8 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:40:17 +00:00
gpt-engineer-app[bot]andrenee-png 4ca9d41165 Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:38:41 +00:00
gpt-engineer-app[bot]andrenee-png b6233ade1b Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 20:38:33 +00:00
gpt-engineer-app[bot] 2a6a6e4d94 Work in progress 2026-06-30 20:38:22 +00:00
gpt-engineer-app[bot]andrenee-png 25ec4d4bc9 Lovable update
I need a website for school similar to: https://praxipower.com/solutions/

*Attendance - by class would be nice, especially as we expand. A teacher would only see their students.

*Student information: standard contact information. Authorized pick up. Allergies. Photo release (yes/no). Upload signed contracts (this behind an admin wall).

*Tuition ledger card

    -Monthly payment plan

    -Late pick up

    -Activity fees

*Sending text/emails to parents. A lot of our parents communicate via text, so it would be nice to have this feature, but I’m sure it’s limited because of cell phone stuff. But could there be a communication portal? Or… how do doctor’s offices send texts?? 

*Can they complete documents electronically? I don’t want these public facing, but If I push out a document through the site to current students to secure their spot for next year, could the parent complete that electronically and it automatically populated into the student account? It’s okay to tell me I’m far reaching LOL Maybe that 

*Can this be linked to our current website? Could it be behind a parent login wall?

*Calendar (very low on the list…could just be a document that shows the school year at a glance… like BPS basic calendar).

X-Lovable-Edit-ID: edt-c8f62e11-9706-4a04-8b29-68fc71cf8991
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
2026-06-30 19:47:00 +00:00
gpt-engineer-app[bot] d046403260 Work in progress 2026-06-30 19:46:40 +00:00
Lovable cb75921659 template: tanstack_start_ts_current-40f3c252c0da 2025-01-01 00:00:00 +00:00