ahpandClaude Sonnet 4.6 089c114019 feat: mobile-first responsive overhaul — safe areas, touch targets, bottom sheet, bottom nav
Viewport:
- Add `viewport` export with `viewport-fit=cover` (enables CSS safe-area-inset-*
  on bezel-less iOS/Android) and `interactive-widget=resizes-content` (prevents
  layout jumps from virtual keyboard open/close)

iOS zoom prevention:
- input.tsx, textarea.tsx: change text-sm (14px) → text-base sm:text-sm (16px)
  on mobile; iOS Safari auto-zooms any input with font-size < 16px

Touch targets:
- button.tsx: default h-10 → h-11 (44px), sm h-8 → h-9 (36px), icon h-10→h-11
  matching the 44×44px iOS HIG and WCAG 2.5.5 minimum
- Add touch-manipulation to buttons, inputs, textarea to eliminate 300ms tap delay

Dialog → mobile bottom sheet:
- On mobile (< 640px): anchored to bottom with full width, rounded top corners,
  slide-in-from-bottom / slide-out-to-bottom animation, drag handle affordance,
  max-h-[90svh] + overflow-y-auto to prevent viewport overflow
- Safe area padding: pb-[max(1.25rem,env(safe-area-inset-bottom))]
- On desktop (sm+): unchanged centered modal with zoom animation
- Close button gets a 32×32 tap area on mobile

Mobile navigation:
- New bottom-nav.tsx: persistent 3-tab bottom bar (مسیر/مرکز/لیگ) shown below
  md: breakpoint, hidden on desktop; 56px height + safe-area-inset-bottom;
  active tab gets heavier stroke and scale
- Only shown for authenticated non-admin users
- app-shell.tsx: injects BottomNav; main content gets dynamic padding-bottom to
  clear the bar (56px + safe area) on mobile, reverts to py-10 on md:
- Footer: safe-area-inset-bottom padding so content clears iPhone home indicator

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-18 10:51:37 +03:30

Pargar mark

Pargar

A bootcamp learning path with no shortcuts.
Verified watch, quizzes with hearts, a skill tree, and a mentor. The product UI is Persian (پرگار).

release AGPL-3.0

Pargar is a gated LMS for a bootcamp. A student watches the lesson for real, passes that lesson's quiz, and only then opens the next branch of the skill tree. Alongside the path: mentor chat, events, a weekly league, a monthly challenge, and a certificate.

Public registration sits behind a phone whitelist. Invite links work on their own. Students cannot recover a password themselves; an admin sets a new one from that person's profile.

The path

Step What happens
Verified watch Watch time is checked with periodic heartbeats. Skipping ahead does not finish the lesson.
Quiz with hearts Each wrong answer spends a heart. An empty heart meter locks the account until staff reviews it.
Skill tree The next branch opens only after its parent is passed. Staff unlock the following lesson.
Community Mentor chat, events, a weekly league that resets on Monday, and a monthly challenge.
Certificate An unlisted digital link. A physical copy, when enabled, is offline payment only.

Three roles: a student walks the path, a mentor sees curriculum and student learning, and an admin also manages users, invites, site settings, and physical certificate orders.

Product detail: docs/product.md

Run it locally

Docker is required. Copy .env.example and replace every replace-with-… value. The admin password is ADMIN_PASSWORD. The default username is admin.

cp .env.example .env
./scripts/compose-dev.sh up -d --build

The app is at https://localhost. Traefik uses its own certificate, so the browser shows one warning. API health:

curl -k https://localhost/api/health

k3s and production: docs/deployment.md

Stack

Layer Technology
API Go, Postgres, Redis, S3/RustFS, WebSocket
UI Next.js 15, React, Tailwind
Edge Traefik, on Compose and Helm

The browser talks to one origin. Traefik splits the UI from /api. Detail: docs/architecture.md

Repository

backend/     API, migrations, seed data
frontend/    Next.js UI
deploy/      Compose, Traefik, Helm chart
scripts/     Local run, k3s, backup
docs/        Engineering docs
Doc Read it for
Product Student path, admin, invites, certificates
Architecture Data flow and service boundaries
Development Local workflow and tests
Deployment Compose, Helm, production
Security Sessions, secrets, rate limits, uploads
Operations Backup, metrics, troubleshooting
API Route contract
Configuration Environment variables

Index: docs/README.md

License

Released under AGPL-3.0.

S
Description
Bootcamp learning path with no shortcuts
https://pargar.panahifar.ir Readme AGPL-3.0
4 MiB
Languages
TypeScript 58.1%
Go 40.3%
CSS 1%
Shell 0.2%
Go Template 0.2%
Other 0.1%