Maintainer Reference
Find Artists
Discover creative talents across music, theatre, media, literature & applied arts.
1. Speciality-based colour theming
Every artist profile is visually themed by their instrument - instantly recognisable at a glance.
Illustrative cards (palette + directory layout)
Two specialities
Example: multi-instrumentalist
Fictional example - palette only
Three specialities (maximum)
Example: trio of roles
Fictional example - palette only
Registered artists from the directory
Akshay J
Akshaya Sundar
Anirudh Natarajan
Arun Vishwanath
Deeksha Sivaramakrishnan
Gayathri Harihara Subramanian
lib/speciality-theme.ts for tests). Artists can pick up to three specialities on registration; each tag uses its stored colour, and the card header uses those same values (solid for one colour, diagonal linear-gradient when several distinct colours apply). Single-speciality artists get a solid colour header. All text colours are WCAG AA compliant (≥4.5:1 contrast ratio - verified by property-based tests).2. Multilingual Unicode support
Artists can write their bio and profile text in Unicode scripts across regions - Indic scripts, Arabic, Chinese, Japanese, Korean, Latin, and mixed-script combinations.
Tamil
கர்நாடக இசை என் உயிர். சிறு வயதிலிருந்தே வீணை வாசிக்கக் கற்றுக்கொண்டேன்.
Arabic
الموسيقى جزء من حياتي الإبداعية. تعلمت العود منذ الصغر وأحب التعاون مع فنانين من مجالات مختلفة.
Chinese
音乐是我创作生活的一部分。我从小学习古筝,也喜欢与不同领域的艺术家合作。
Kannada
ಕರ್ನಾಟಕ ಸಂಗೀತ ನನ್ನ ಜೀವನದ ಭಾಗ. ನಾನು ಚಿಕ್ಕಂದಿನಿಂದ ವೀಣೆ ಕಲಿತೆ.
Hindi
कर्नाटक संगीत मेरे जीवन का अभिन्न अंग है। मैंने बचपन से मृदंगम सीखा।
Mixed
My journey in music began in Chennai (சென்னை) and continues in Amsterdam - classical vocals (ശാസ്ത്രീയ സംഗീതം) and Korean theatre (한국 연극) shape my practice.
font-display: swap) provides broad glyph coverage with no tofu (□) characters. Correct lang attributes are set on user-generated content samples for screen readers and browser shaping engines. Mixed-script content (for example English + Tamil + Malayalam + Korean in the same paragraph) renders cleanly, and the same editor pipeline remains compatible with Arabic, Chinese, Japanese, and Korean text.3. Structured artist search
Logged-in artists can find people by name, speciality, and availability dates - no LLM required.
Live demo at /artists with the shared artist directory and filtering flow used across the portal.
4. Magic-link authentication
No passwords to remember. We email you a time-limited link instead.
Step 1
Enter your email
Open the sign-in page and type the same email you used when you registered. We send a single-use sign-in link to that inbox.
Step 2
Use the link in your email
Tap the link in the message from us. If nothing shows up within a minute, check Spam, Promotions, or similar folders in your mail app.
Step 3
Tap Continue to finish
Your browser opens a short confirmation screen. Press Continue once to complete sign-in. Use Log out in the header or dashboard when you finish on a shared device.
/auth/verify?token=…; the page loads on GET only and the browser submits a POST to consume the token so mail previews and prefetch cannot burn the link. Links expire after 72 hours. Successful sign-in sets a 30-day session cookie backed by an HS256 JWT; Edge middleware validates it without a database round-trip on every request. Logout uses POST /api/auth/logout. Admin access comes from the Artist.isAdmin database flag. While signed in, a line above the site footer can show your profile display name, session expiry, and for admins (admin) after the name.5. PWA & mobile-first design
Installable on iOS and Android. Offline-capable. All touch targets ≥44×44px.
Installable
Web App Manifest with standalone display mode. Add to home screen on iOS and Android.
Offline-capable
Service Worker caches the app shell and previously loaded artist profiles. Offline indicator shown.
Push notifications
VAPID-based Web Push when your operator enables browser notifications. Email vs push preferences live under /profile/notifications.
6. Multi-region extensibility
Deploy for any country by updating environment configuration - zero code changes.
# .env.local - example deployment
7. Home spotlight & featured artist
The landing page highlights one vocalist each local calendar day, with room for discovery without crowding the layout.
Daily rotation
The featured slot prefers Vocal artists and falls back to the full directory when needed. Which artist appears advances deterministically by calendar dayin the deployment country's timezone (derived from DEPLOYMENT_REGION unless DEPLOYMENT_TIMEZONE is set). Ops can pin a vocalist for a given day via the DailyFeatured table.
Profile photo
The card loads each artist's public profile photo URL (the HTTPS link they saved on their profile), with a coloured initial if the image cannot load.
getDailyFeaturedArtistForHome() in lib/queries/artists.ts, local-day helpers in lib/local-day.ts, deployment timezone in deployment.config.ts.8. Admin moderation tools
Full CRUD on artists and specialities, plus registration review and account suspension.
Registration review
Approve or reject applicants with review comments, filters, and clear status handling. Approved artists receive a magic-link login email automatically.
Artist management
Edit any artist profile, suspend accounts with validation and audit context, and keep directory records tidy.
Reported photo moderation
Review reported profiles in a dedicated queue, resolve reports in bulk, clear current images, and suspend repeat offenders.
Speciality management
Add/edit/delete specialities and their colour palette. Delete guard prevents removing specialities in use.
/admin/*) are protected by Edge middleware. Admin role is stored on the artist row via the isAdmin database flag.In dev, use to get an instant admin session.9. Product analytics & privacy (PostHog)
Optional telemetry with conservative defaults - see /privacy for end-user language.
What is captured
- Explicit product events plus manual page views and PostHog pageleave events (autocapture stays off).
- Browser traffic in production uses a same-origin
/api/phproxy so ingest hosts are not embedded in the client bundle. - Server routes can emit events with
artistIdas the PostHog distinct id - not email. - Post-login redirects add
?ph_identify=1once to the artist or admin dashboard URL so the client canposthog.identify(artistId, …)and align browser analytics with the same id (query param is stripped on the next navigation; local/api/dev/logindoes the same in non-production).
Session Replay & choice
- Session Replay is gated by environment variables; SDK text masking is enabled.
- Do Not Track and the
ph_opt_outcookie are respected on the client. - Visitors can use /privacy (opt-in / opt-out) for the full disclosure.
.kiro/specs/posthog-analytics/ and the operator guide .kiro/steering/posthog-admin-guide.md. Env template: env.example (PostHog block).10. Tech stack at a glance
Modern, operator-friendly, no usage-limit surprises.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Hosting | Cloudflare Workers + OpenNext |
| Language | TypeScript |
| Styling | Tailwind CSS |
| Database | PostgreSQL via Neon |
| ORM | Prisma |
| Auth | Custom magic-link (JWT + Resend) |
| Media | HTTPS profile assets |
| Cache/sessions | Cloudflare KV (optional) |
| Rich text | Tiptap |
| Maps | D3.js + GeoJSON |
| i18n | next-intl |
| Analytics | PostHog (optional) |
| Testing | Vitest + fast-check |
Maintainer quick links
11. Connections V1 rollout notes
The new artist-to-artist connection layer is documented separately so operators can follow the live implementation.
The connections module is currently feature-flagged and documented on a dedicated sub-page with lifecycle diagrams, runtime gating notes, data design, and V1 admin oversight details.
Open Connections V1 notes