尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Cue – schema- & samarbetsapp för personliga assistenter Cue är en enkel, mobilanpassad PWA för små team (2–15 personer) av personliga assistenter inom hemtjänst/hemvård som jobbar 24-timmarspass och avlöser varandra. Appen samlar:檢視完整 README ↗
Cue är en enkel, mobilanpassad PWA för små team (2–15 personer) av personliga assistenter inom hemtjänst/hemvård som jobbar 24-timmarspass och avlöser varandra. Appen samlar:
Allt gränssnitt är på svenska.
supabase/schema.sql och kör det. Detta skapar
alla tabeller, policys (Row Level Security), en SQL-funktion för att
bekräfta byten atomiskt, samt en storage-bucket för foton.http://localhost:3000/auth/callbackhttps://ditt-projekt.vercel.app/auth/callbackFörsta användaren blir automatiskt admin. Så snart du loggar in en gång skapas en profilrad, och den allra första personen i systemet blir admin (kan bjuda in/ta bort kollegor och byta admin-status på andra).
cp .env.example .env.local
Fyll i .env.local med värdena från Supabase:
NEXT_PUBLIC_SUPABASE_URL=https://ditt-projekt.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=din-anon-key
SUPABASE_SERVICE_ROLE_KEY=din-service-role-key
SUPABASE_SERVICE_ROLE_KEY används endast server-side (i Server Actions) för
att skicka inbjudningar och ta bort kollegor. Den får aldrig committas eller
skickas till klienten.
npm install
npm run dev
Öppna http://localhost:3000. Logga in med din e-post – du får ett mejl med en inloggningslänk (magic link).
npm run test # enhets- och Server Action-tester (Vitest, inga beroenden)
npm run test:db # tester mot en riktig Postgres-instans (RLS + confirm_swap)
npm run test:all # båda
npm run test täcker valideringen av pass (start/sluttid), hela
bytes-tillståndsmaskinen (src/lib/validation/), Server Actions
(src/lib/actions/, med en mockad Supabase-klient), date-utils.ts och
realtime-reducern.
npm run test:db kräver en Postgres-instans (DATABASE_URL, default
postgres://postgres:[email protected]:5432/postgres – i CI startas den
som en service-container, se .github/workflows/ci.yml). Den kör
supabase/schema.sql mot en engångsdatabas (se db-tests/fixtures/ för de
minimala auth/storage-stubbar som gör det möjligt utan Docker eller ett
riktigt Supabase-projekt) och testar den faktiska
atomiciteten i confirm_swap – inklusive ett race-test som verifierar att
radlåset (for update) faktiskt blockerar en samtidig bekräftelse – samt
RLS-policyerna på profiles och notes. Det är detta lager, inte
applikationslagrets validering, som faktiskt garanterar att ett pass aldrig
kan hamna i ett inkonsekvent tillstånd (t.ex. två personer tilldelade samma
pass).
.env.local (NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY,
SUPABASE_SERVICE_ROLE_KEY).https://ditt-projekt.vercel.app/auth/callback) i redirect-listan.Både Vercel och Supabase har generösa gratisnivåer som räcker gott för ett team på 2–15 personer.
Som admin, gå till Inställningar i appen och skicka en inbjudan via e-post. Personen får ett mejl med en inloggningslänk och blir automatiskt medlem i teamet (skapar sin profilrad vid första inloggningen).
src/
├── app/
│ ├── (app)/ # Skyddade sidor (kräver inloggning)
│ │ ├── schema/ # Gemensamt schema
│ │ ├── byten/ # Passbyten
│ │ ├── anslagstavla/ # Anslagstavla
│ │ ├── brukare/ # Brukare + placeringschecklista
│ │ └── installningar/# Admin: bjud in/ta bort kollegor
│ ├── login/ # Inloggning (magic link)
│ ├── auth/callback/ # OAuth/OTP-callback
│ └── offline/ # Offline-fallback för service worker
├── components/ # UI-komponenter per feature
├── lib/
│ ├── actions/ # Server Actions (skapa/uppdatera/ta bort)
│ ├── validation/ # Ren, testbar valideringslogik
│ ├── hooks/ # useRealtimeList m.fl.
│ └── supabase/ # Supabase-klienter + handskrivna databastyper
supabase/
└── schema.sql # Hela databasschemat, RLS-policys och funktioner
Se supabase/schema.sql för fullständig
definition. I korthet:
profiles – en rad per användare, kopplad till Supabase Authclients – brukare/hemshifts – pass (start, slut, tilldelad person, ev. brukare, status)swap_requests – bytesförfrågningar med tillstånden oppen →
vantar_bekraftelse → bekraftad/avbojd/avbrutennotes – anslagstavlans inläggplacement_items + placement_confirmations + placement_item_history –
"samma sak, samma plats"-checklistan med bekräftelser och ändringshistorikAlla tabeller har Row Level Security aktiverat. Eftersom alla i teamet ska se
samma schema/anslagstavla finns ingen multi-tenant-uppdelning – policyerna
säkerställer bara att man måste vara inloggad, samt att vissa åtgärder (t.ex.
redigera/ta bort en anteckning) endast får göras av den som skapade den.
Ett undantag: profiles.is_admin är särskilt skyddad – en användare får
uppdatera sin egen profil men aldrig sin egen admin-status, och endast en
admin får ändra någon annans (se public.is_admin() och policyn på
profiles i supabase/schema.sql, samt db-tests/rls-profiles.test.ts).
Bekräftelse av ett pass-byte görs via SQL-funktionen confirm_swap, som
uppdaterar bytesförfrågan och flyttar pass-ägarskapet i en och samma
transaktion – detta garanterar att ett pass aldrig kan hamna i ett
inkonsekvent tillstånd (t.ex. två personer tilldelade samma pass, eller ett
"bekräftat" byte som inte faktiskt genomfördes).
Schema, byten, anslagstavla och checklistan uppdateras direkt för alla i teamet via Supabase Realtime (Postgres-ändringar strömmas till klienterna) – ingen omladdning krävs.