/**
* Kavya Report Card — marks, moments & PDFs, mono core
* @author Roshan Aryan Majhi · top contributor by volume
*/
Every mark.
Composed, not compiled.
Kavya Report Card composes term reports — marks, skills, photo moments — inside a five-app Turborepo monorepo, exporting print-ready PDFs to a parent portal. I am its top contributor, owning moments, settings and merge reviews.
// design_system
System first, screens second.
color/tokens
kavya-red
#E93E35
paper
#FFFFFF
ink
#18181B
success
#2F9E44
info
#0A66B2
line
#F1E9E9
type/scale
Aa
Inter / report serif
Heading 20
Body 14 · print-calm
mono 11 · marks & terms
radius/soft
tables sharp · seals round
components/ui
{ "student": "Aarav Sharma", "term": "term 2", "gpa": 3.8, "moments": 4 }
Aarav Sharma · Grade VIII
term 1 report · 2082
| Mathematics | 92A+ |
| Science | 88A |
| English | 95A+ |
| Nepali | 81B+ |
science fair
synced
football finals
synced
art exhibit
pending
robotics club
synced
+27 more in package.json
// why_it_exists
Paperwork that parents actually read.
Report season meant desktop files, inconsistent formats and screenshots of marks — fragile, unshareable and impossible to revise.
Kavya composes reports like documents. Marks, skills and moments in one composer, exported to verified PDFs and handed to parents through their own portal — while five apps share one design system underneath.
// feature_modules
What ships inside.
report_composer
BlockNote-powered report editing with image crop and upload, color pickers and coordinator details — every report composed, not compiled.
kavya_moments
Photo moments synced between settings and the update-report dialog, with refetch states, save guards and responsive cover layouts.
marks_grades
Subject marks entry with nullable MST fields, stream labels and entrepreneur points flowing into grade tables and report pages.
pdf_pipeline
One-click PDF generation from the composed report, with QR codes generated on first render for parent verification.
parent_portal
A separate viewer app where parents securely open and download reports — same data, calmer surface.
performance_charts
Recharts analysis views tracking subject trajectories across terms — the story behind the grades.
settings_config
A refactored settings surface owning streams, skills, cocurricular imagery and moment covers across breakpoints.
shared_ui
Fifty-plus Radix + Tailwind primitives in @workspace/ui, consumed by all five apps — build once, theme everywhere.
// engineering_decisions
Worth noting.
- +Monorepo over fragmentation — five apps shared duplicated configs and components — Turborepo plus pnpm workspaces ended that.
- +BlockNote for composing — reports are documents, so the editor is a document editor with blocks, not a form with fields.
- +Moments sync both ways — settings and the update dialog read and write the same moment store — no stale galleries.
- +PDF as first-class output — export isn't an afterthought; the report is designed to print beautifully from day one.
- +Per-app deploy branches — each app ships on its own branch through multi-stage Docker builds — independent releases, shared code.
// my_role
What I built.
Top contributor by volume — moments, settings and MST features plus merge-review duty across the kavya lines.
$kavya_moments
- Moments surface in settings with responsive cover layouts
- Two-way sync between settings and the update-report dialog
- Refetch states and save-button guards after successful saves
- Figma-matched borders, weights and coordinator details
$settings_mst
- Settings page refactor across streams and skills
- MST subject fields made nullable end to end
- QR URLs accepting empty strings, generated on first render
- Cocurricular image sizing and entrepreneur-point cleanup
$merge_reviews
- Merge-review refactors unknotting long-lived branches
- Conflict resolutions across kavya feature lines
- Build-error fixes keeping deploy branches green
// in_one_line
Report cards without the paperwork — every mark, moment and skill composed once, printed everywhere.