Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗The MilcodeUni reference SaaS (weeks 6–8). A barber, salon or coach shares one link; customers pick a service and a free time; the owner manages everything in a dashboard.
Stack: Next.js (App Router, Server Actions) · Supabase (Postgres, Auth, Row Level Security) · Vercel
Built to the MilcodeUni capstone spec:
| Required | Where |
|---|---|
| Landing page with a clear value proposition | / |
| Service listing and detail | /b/<link> and /b/<link>/services/<id> |
| Sign-up, sign-in, sign-out | /login |
| Booking form with validation | /b/<link>: service → day → free time → name + WhatsApp |
| Loading, empty, success and error feedback | loading.tsx, empty states, form errors, /done |
| Protected dashboard | /dashboard (signed-out visitors go to /login) |
| Create and view bookings | New requests, today's schedule, next 7 days, "Add a booking" |
| Update a status | Confirm, Decline, Done, Cancel |
| Delete with confirmation | Services and cancelled/done bookings ("Sure? Yes, delete") |
| Owner-only data with RLS | supabase/migrations/0001_mawid.sql |
| Responsive navigation | Dashboard menu stacks on phones |
How double-booking is prevented, in two simple layers:
src/lib/bookings.ts).How privacy works: customers can send a booking (always pending) but can't read any.
The booking page only reads public_busy_times, a view with the taken times and no names or phones.
supabase/migrations/0001_mawid.sql, then supabase/seed.sql
(creates the demo business Atlas Barbershop)..env.example to .env.local and fill in the URL and anon key
(Project Settings → API).npm install
npm run dev
Open http://localhost:3000 → "Try the demo booking page".update public.businesses
set owner_id = (select id from auth.users where email = '[email protected]')
where slug = 'atlas-barbershop';
Your dashboard now shows Atlas Barbershop. (Or create your own business from the setup screen.)Tip: for quick testing, turn off "Confirm email" in Supabase → Authentication → Providers → Email.
supabase/migrations/0001_mawid.sql tables, view, RLS policies
supabase/seed.sql demo business: Atlas Barbershop
src/app/page.tsx landing page
src/app/b/[slug]/ booking page, service detail, form, server action, confirmation
src/app/login/ sign in / sign up / sign out (server actions)
src/app/dashboard/ today, add booking, services & hours, first-time setup
src/lib/bookings.ts server-side checks: hours, past times, overlaps
src/lib/slots.ts which start times to show (every 30 minutes)
src/lib/time.ts "today" and "now" in Morocco, date formatting
src/proxy.ts keeps the login fresh, protects /dashboard (from Supabase's Next.js guide)
Dates and times are stored as the shop's local time (day + start_time), so the
only timezone code is "what's today in Morocco" in src/lib/time.ts.