IF1EIGHT0STY
srckavya_core.pdf

/**
* 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.

design_system.fig

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

xs
md
lg
full

tables sharp · seals round

components/ui

Export PDFPreviewA+
Drop a moment…crop
Tokens → components, no hard-coded hex
mono.stat
05
apps, one repo
apps, one repo
ui.stat
50+
shared components
shared components
report.json
{
  "student": "Aarav Sharma",
  "term": "term 2",
  "gpa": 3.8,
  "moments": 4
}
One report
report.preview
A

Aarav Sharma · Grade VIII

term 1 report · 2082

GPA 3.6
Mathematics92A+
Science88A
English95A+
Nepali81B+
Switch terms, watch it recompose
moments.sync

science fair

synced

football finals

synced

art exhibit

pending

robotics club

synced

Synced both ways
trend.viz
92
Maths
84
Science
95
English
78
Nepali
88
ICT
Trajectory, not snapshots
export.pdf
aarav-sharma-term2.pdf2.1 MB
Print-ready by design
editor.stack
BlockNote blocks0.30
Image crop + uploadcover fit
Color pickersfigma-matched
Compose, don't type
commits.log
470+ commits · moments & merges
package.json
react19.1.2
react-router-dom7.4.1
@blocknote/react0.30.0
recharts2.15.3
@tanstack/react-query5.71.1
turbo2.4.2

+27 more in package.json

The stack
turbo.json
turbo build5 apps
pnpm workspacesshared
deploy/* branchesisolated
One pipeline, five apps

// 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.

blocknoterich editing

kavya_moments

Photo moments synced between settings and the update-report dialog, with refetch states, save guards and responsive cover layouts.

sync both waysmedia

marks_grades

Subject marks entry with nullable MST fields, stream labels and entrepreneur points flowing into grade tables and report pages.

marks entrygrades

pdf_pipeline

One-click PDF generation from the composed report, with QR codes generated on first render for parent verification.

pdf exportqr verify

parent_portal

A separate viewer app where parents securely open and download reports — same data, calmer surface.

react-pdfsecure view

performance_charts

Recharts analysis views tracking subject trajectories across terms — the story behind the grades.

rechartstrends

settings_config

A refactored settings surface owning streams, skills, cocurricular imagery and moment covers across breakpoints.

config hub

shared_ui

Fifty-plus Radix + Tailwind primitives in @workspace/ui, consumed by all five apps — build once, theme everywhere.

design systemturborepo

// 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.

470+
commits
590
kavya app files
05
apps in monorepo

$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.
React 19TypeScriptTurborepoBlockNoteRechartsRHF + ZodTanStack QueryZustandAxiosreact-pdfDockerTailwind 4