Minimal portfolio web app (Next.js + Convex) with admin UI and file storage. This README contains only the essential developer setup and repository pointers.
Prerequisites
- Node.js 18+ (LTS)
- npm (or yarn/pnpm)
Install
npm installRun (development)
npm run devBuild
npm run build
npm startConvex (local development)
- Start Convex locally if you use it:
npx convex dev(orconvex dev) in a separate terminal.
Create a .env.local from the template below. Do not commit secrets.
.env.example
CONVEX_DEPLOYMENT=
NEXT_PUBLIC_CONVEX_URL=
# Convex HTTP Actions URL
CONVEX_SITE_URL=
# Clerk Authentication
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
CLERK_SECRET_KEY=
src/app/— Next.js routes & pages (public, admin)src/features/— feature folders (profile, publications, sections)src/shared/ui/— reusable components (Button, Dialog, Skeleton, DatePicker)src/hooks/— client hooks (profile, publications, file URL)convex/— Convex schema and server functions (schema.ts,profile.ts,store.ts)public/— static assets (images, static CV fallback)
- Reuse
PublicationListSkeletonandUniversalSkeletonfor content loading states. - Prefer component-level skeletons (content-only) rather than full-page flashes.
- Add a convex migration: update
convex/schema.tsand run Convex local/dev tooling. - File uploads: use
convex/store.tshelpers (getUploadUrl,finalizeUpload,deleteFile). - To debug client/server component errors: ensure files that use React hooks or createContext include
"use client"at the top.
- Run unit tests:
npm test - Lint:
npm run lint
- This README intentionally omits secret values; use the
.env.exampleas a template. - Keep UI skeletons in
src/shared/ui/and reuse them for lists and forms.
See repository owner for access and CI details.