尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證All code for printmarket
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A production-ready marketplace connecting clients who need 3D printing with printer owners who have the equipment.
Stack: Next.js 15 (App Router) · TypeScript · Tailwind CSS · Supabase (Auth + DB + Storage) · Vercel檢視完整 README ↗A production-ready marketplace connecting clients who need 3D printing with printer owners who have the equipment.
Stack: Next.js 15 (App Router) · TypeScript · Tailwind CSS · Supabase (Auth + DB + Storage) · Vercel
git clone <your-repo>
cd print-marketplace
npm install
supabase/migrations/001_initial_schema.sqlIn Supabase Dashboard → Storage → New bucket:
job-filesThen run these policies in SQL Editor:
-- Allow authenticated users to upload
create policy "job_files_upload"
on storage.objects for insert
with check (bucket_id = 'job-files' and auth.role() = 'authenticated');
-- Allow authenticated users to read
create policy "job_files_read"
on storage.objects for select
using (bucket_id = 'job-files' and auth.role() = 'authenticated');
cp .env.example .env.local
Edit .env.local:
NEXT_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
NEXT_PUBLIC_APP_URL=http://localhost:3000
In Supabase Dashboard → Authentication → URL Configuration:
http://localhost:3000http://localhost:3000/auth/callbacknpm run dev
After signing up, run in Supabase SQL Editor:
update public.profiles
set role = 'admin', onboarding_complete = true
where email = '[email protected]';
git init
git add .
git commit -m "Initial commit"
gh repo create print-marketplace --public --push
npx vercel --prod
Or connect via the Vercel dashboard → Import Git Repository.
In your Vercel project → Settings → Environment Variables, add:
| Key | Value |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Your Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Your Supabase anon key |
SUPABASE_SERVICE_ROLE_KEY | Your service role key |
NEXT_PUBLIC_APP_URL | Your Vercel deployment URL |
In Supabase → Authentication → URL Configuration:
https://your-app.vercel.apphttps://your-app.vercel.app/auth/callbackprint-marketplace/
├── app/
│ ├── (auth)/ # Login & signup pages
│ │ ├── login/
│ │ └── signup/
│ ├── auth/callback/ # Supabase OAuth callback
│ ├── onboarding/ # Role selection
│ ├── (protected)/ # Authenticated routes
│ │ ├── layout.tsx # Auth guard + sidebar layout
│ │ ├── dashboard/
│ │ │ ├── client/ # Client dashboard
│ │ │ ├── printer/ # Printer owner dashboard
│ │ │ └── admin/ # Admin dashboard
│ │ ├── jobs/ # Jobs feed + new job form
│ │ │ └── [id]/ # Job detail + quote flow
│ │ ├── messages/ # Message threads
│ │ │ └── [jobId]/
│ │ └── profile/setup/ # Printer profile form
│ ├── page.tsx # Public landing page
│ └── layout.tsx # Root layout
├── components/
│ ├── ui/ # Button, Input, Badge, etc.
│ ├── layout/ # Navbar, Sidebar
│ ├── jobs/ # JobCard
│ ├── quotes/ # QuoteForm
│ └── messages/ # MessageThread (realtime)
├── lib/
│ ├── supabase/ # Browser + server clients
│ ├── types/ # Full TypeScript DB types
│ └── utils.ts # Helpers, constants
├── middleware.ts # Auth + onboarding guards
├── supabase/migrations/ # SQL schema + RLS policies
└── .env.example
| Table | Purpose |
|---|---|
profiles | One per user; stores role, display name |
printer_profiles | Equipment, materials, pricing for printer owners |
jobs | Client job postings |
job_files | Uploaded 3D model files per job |
quotes | Printer owner bids on jobs |
messages | Per-job chat (client ↔ accepted printer) |
reviews | Post-completion ratings |
platform_settings | Admin-managed key-value config |
All tables have Row-Level Security. See supabase/migrations/001_initial_schema.sql for full policies.
Stripe is prepared but not activated. When ready:
STRIPE_SECRET_KEY, NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRETstripe_enabled to true in platform_settingsapp/api/stripe/ routes for Connect onboarding and payment intents