Board Notes is a small community app for custom keyboard enthusiasts. Users can browse posts, filter by category, search, save posts, comment, and create or edit their own posts with uploaded cover images and rich text content.
- Next.js 13 pages router
- React 18
- TypeScript
- Tailwind CSS
- React Query v3
- Supabase Auth
- Supabase Postgres
- Supabase Storage
- Quill editor
- Shadcn Sonner for toasts
- Home feed with pagination
- Category feeds
- Search from the header on desktop and a dedicated search page on mobile
- Sign up, login, and email confirmation guidance
- Create, edit, and delete posts
- Cover image upload to Supabase Storage
- Embedded editor image upload to Supabase Storage
- Save and unsave posts
- Comment and comment deletion by owner
Install dependencies:
npm installStart the app:
npm run devThe dev server runs on:
http://localhost:3002
Useful commands:
npm run lint
npm run buildCreate .env.local with:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_KEY=your_supabase_anon_keyThe app expects:
- a public Storage bucket named
images - category images under
images/categories/... - post images under
images/posts/<user_id>/...
The app stores post image URLs in public.posts.img_url.
Reference SQL files live in SQL:
Live migration files for an existing Supabase project:
SQL/20260321_202930_live_schema_migration.sqlSQL/20260323_203429_add_post_ownership.sqlSQL/20260331_120500_add_posts_update_policy.sql
For a fresh setup, preferred order is:
SQL/userTable.sqlSQL/tables.sqlSQL/table_policies.sqlSQL/image_policies.sql
For an existing database, review the migration files instead of replaying the reference files blindly.
Current editor and post limits:
- title: 80 characters
- body text: 5000 characters
- embedded images per post body: 5
- embedded image file size: 5 MB each
- post list pagination: 10 posts per page
Default post image:
/images/default/2149680226.jpg
src/pages: route entry pointssrc/components: reusable UIsrc/api: Supabase data-access helperssrc/config: routes, Supabase config, app constantssrc/types: shared TypeScript typessrc/styles: global styles
Important pages:
src/pages/index.tsxsrc/pages/post/new/index.tsxsrc/pages/post/[id].tsxsrc/pages/post/[id]/edit.tsxsrc/pages/category/[id].tsxsrc/pages/search/index.tsxsrc/pages/saved/index.tsxsrc/pages/my-posts/index.tsx
- The app uses the Next.js pages router, not the app router.
- Comment author names come from
profiles, notusers. - If you change image upload path conventions, update both the app code and the Storage RLS policies.
next.config.jsmust stay aligned with the active Supabase project hostname fornext/image.
