Bops
A team of AI bots that runs your business ops: inbox, pipeline, invoices, reports. Each one has its own computer, email and phone number, and remembers everything.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
QR-basert utleie av anleggsmaskiner. Kunden skanner, leier uten innlogging, og leverer ved å ta bilde. Admin har oversikt i liste og kalender. Begrunnelsen bak designvalgene ligger i docs/TEKNISK-PLAN.md. Gå til supabase.com, lag et gratis prosjekt, og velg region Frankfurt (eu-central-1) – nærmest Norge, og holder persondata innenfor EØS. Åpne SQL Editor i Supabase-dashbordet, lim inn hele innholdet i supabase/migrations/0001_init.sql og kjør det. Under Storage, lag en bøtte med navn bilder. Sett den til privat – bildene hentes gjennom signerte URL-er, ikke åpne lenker.Read the full README ↗
QR-basert utleie av anleggsmaskiner. Kunden skanner, leier uten innlogging, og leverer ved å ta bilde. Admin har oversikt i liste og kalender.
Begrunnelsen bak designvalgene ligger i docs/TEKNISK-PLAN.md.
Gå til supabase.com, lag et gratis prosjekt, og velg region Frankfurt (eu-central-1) – nærmest Norge, og holder persondata innenfor EØS.
Åpne SQL Editor i Supabase-dashbordet, lim inn hele innholdet i
supabase/migrations/0001_init.sql og kjør det.
Under Storage, lag en bøtte med navn bilder. Sett den til privat –
bildene hentes gjennom signerte URL-er, ikke åpne lenker.
cp .env.local.example .env.local
Fyll inn verdiene fra Project Settings → API i Supabase.
npm run dev
Under Authentication → Users i Supabase, legg til en bruker med e-post og passord. Kjør så i SQL Editor:
insert into admin_brukere (id, navn, epost)
select id, 'Ditt Navn', email from auth.users where email = '[email protected]';
Videre brukere opprettes fra /admin/brukere inne i appen.
src/app/m/[qr]/ Kundeside per maskin (QR-kode på maskinen)
src/app/retur/ Felles retur-side (QR-kode på arbeidsstedet)
src/app/leie/[ref]/ Kvittering og retur for én enkelt leie
src/app/ansatt/ Uttak til prosjekter for egne folk, krever innlogging
src/app/admin/ Adminpanel, krever innlogging
src/lib/supabase/ Databaseklienter
src/proxy.ts Sesjonsoppfriskning (het middleware.ts før Next 16)
supabase/migrations/ Databaseskjema
docs/ Teknisk plan
| Rolle | Kommer inn på | Kan ta ut utstyr til prosjekter |
|---|---|---|
| Admin | alt | ja |
| Servicearbeider | verkstedet | ja |
| Ansatt | /ansatt | ja |
Brukere lages under /admin/brukere med et midlertidig passord, som må
byttes ved første innlogging. Prosjektene de ansatte velger mellom, legges
inn under /admin/prosjekter. Internleie regnes ut når utstyret leveres,
og summeres per prosjekt – den faktureres ikke.
Varslingskoden ligger klar, men er ikke konfigurert. Uten oppsettet under laster alt som normalt; varsler hoppes stille over, og varslingsskjemaet i innstillingene gir feilmelding ved lagring.
supabase/migrations/0003_varsling.sql i
Supabase SQL Editor. (0002 må være kjørt først – den er kjørt.)send.techauge.no – subdomene, så SPF-en til vanlig e-post ikke
berøres. Lag en API-nøkkel. Gratisplanen har 1 domene og
3 000 e-poster/mnd, som holder lenge her.RESEND_API_KEY=re_...
[email protected]
CRON_SECRET=<tilfeldig streng, f.eks. openssl rand -hex 32>
/admin/innstillinger.
Test med «Send forfallsvarsel nå» – utfallet vises i loggen på
samme side.Merk: uten verifisert domene (kun [email protected]) kan Resend
bare sende til kontoens egen adresse. Kunder får ingenting, og
feilene vises kun i e-postloggen.
SUPABASE_SERVICE_ROLE_KEY omgår all radsikkerhet og må aldri havne i
nettleseren. Den brukes kun i server-ruter for kundeflyten, siden kunden ikke
er innlogget og derfor ikke har en sesjon databasen kan vurdere. Hver slik rute
verifiserer selv at enhets-ID eller leiereferanse hører til raden som hentes.
src/proxy.ts frisker kun opp sesjonen. Selve tilgangskontrollen ligger i
adminlayouten og i hver enkelt server action – server actions kjører som POST
mot siden de brukes fra, og kan derfor ikke sikres av proxy alene.
Radsikkerheten i databasen slipper bare rollen admin til (er_admin(), fra
migrasjon 0011). Service og ansatte kan lese sin egen brukerrad og ingenting
annet – alt de gjør, går gjennom server actions som sjekker tilgangen selv.
Prosjektet kjører Next.js 16, som har flere brytende endringer mot 14/15:
middleware.ts heter nå proxy.tscookies(), params og searchParams er asynkrone og må ventes pårevalidateTag() krever nå to argumenter--turbopack-flagget skal ikke brukesSe AGENTS.md. Dokumentasjonen ligger lokalt i node_modules/next/dist/docs/.