尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A small, calm Japanese-study app. Modules contain levels, levels contain cards, you flip through them one at a time and get a score at the end. Built with Next.js 14 (App Router) + Supabase + Tailwind.
# inside the project folder
npm install
cp .env.local.example .env.local # then fill in the Supabase values (step 2)
npm run dev
That's it. No global tools required.
supabase/schema.sql and run it. This creates the four tables and the row-level security policies.supabase/seed.sql, and run it. This adds the Vocabulary → Level 1 module with all 73 starter cards. To also load the conjugation module, paste supabase/seed_conjugation.sql and run it.NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEY.env.local:NEXT_PUBLIC_SUPABASE_URL=https://xxxxxxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOi...
/admin.By default Supabase Auth allows anyone to sign up. If you want to lock it down to just you, go to Authentication → Providers → Email and turn Enable Sign Ups off.
npm run dev
Then open http://localhost:3000.
/ → /modules/vocabulary → click a level → quiz./admin → log in with the user you created above.NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEY*.vercel.app URL.If you change Supabase keys later, update the env vars in Vercel and redeploy. No build settings to tweak — npm run build and npm start are the standard Next.js commands.
app/
page.tsx Home (module grid)
modules/[slug]/page.tsx Levels in a module
modules/[slug]/[levelId]/page.tsx Quiz
admin/
page.tsx Login
dashboard/page.tsx All modules + stats
modules/new/page.tsx Create module
modules/[id]/page.tsx Edit module + manage levels
modules/[id]/levels/[levelId]/page.tsx Edit level + manage cards
components/
QuizClient.tsx Card flow, scoring, save session
LoginForm.tsx Email/password sign-in
ModuleForm.tsx Create / edit a module
LevelManager.tsx Add / reorder / delete levels
LevelEditor.tsx Inline card edit + bulk import
SignOutButton.tsx
DeleteModuleButton.tsx
lib/
supabase/client.ts Browser Supabase client
supabase/server.ts Server Supabase client (cookies)
types.ts
middleware.ts Protects /admin/* via Supabase session
supabase/
schema.sql Tables + RLS policies
seed.sql Vocabulary / Level 1 starter cards
seed_conjugation.sql Conjugation module + 2 levels of verb/word-type cards
modules, module_levels, cards require an authenticated user (admin). Anonymous users can only insert into sessions. This is enforced at the database level by RLS — it's fine that the anon key is shipped to the browser..trim().normalize("NFC").toLowerCase(), so trailing whitespace and unicode normalization differences won't trip you up.english,japanese per line for quiz modules and verb,form,answer for conjugation modules. Wrap a field in "…" if it contains a comma.sessions with total_cards and correct_first_try; the dashboard averages these per module.