Bookingsystem for utleie av Volvo EC20E gravemaskin i Tromsø.
- Kalenderbasert bookingside med tilleggsutstyr (klype, bringing/henting)
- Vipps-betaling med callback-håndtering
- Automatisk iglohome-låskode for leieperioden
- Bildedokumentasjon ved henting og levering (mobil-optimert)
- Admin-panel med bildesammenligning og statushåndtering
- QR-kode + info-side for klistrelapp på maskinen
- Mock-modus for testing uten ekte API-er
- Node.js 20 eller nyere (nodejs.org)
- En moderne nettleser
cd nvnord
npm installHvis sharp eller sqlite3 feiler under installasjon, se TESTING.md for OS-spesifikke build-tools.
Linux/macOS:
MOCK_MODE=true ADMIN_TOKEN=test1234 npm startWindows (cmd):
set MOCK_MODE=true && set ADMIN_TOKEN=test1234 && npm startWindows (PowerShell):
$env:MOCK_MODE="true"; $env:ADMIN_TOKEN="test1234"; npm startÅpne så:
- http://localhost:3000/ — bookingsiden
- http://localhost:3000/admin.html — admin-panel (bruk
test1234som token) - http://localhost:3000/mock/debug.html — debug-dashboard med SMS-logg og testdata
Se TESTING.md for full testguide.
nvnord/
├── server.js Express-server, ruter
├── package.json Avhengigheter
├── .env.example Mal for miljøvariabler
├── .gitignore Forhindrer at sensitiv data commitsjes
│
├── config/
│ └── config.js Sentral konfigurasjon (priser, maskin, tjenester)
│
├── db/
│ └── database.js SQLite-håndtering, schema
│
├── routes/
│ ├── booking.js Bookingflyt for kunde
│ ├── admin.js Admin-funksjoner (godkjenne, sammenligne)
│ ├── inspeksjon.js Bildeopplasting ved henting/levering
│ ├── info.js Offentlig info (kontakt)
│ └── mock.js Test-API (kun aktivt i mock-modus)
│
├── services/
│ ├── prisService.js Prisberegning med tillegg
│ ├── vippsService.js Vipps-integrasjon
│ ├── iglohomeService.js iglohome-låskoder
│ ├── smsService.js SMS-utsending
│ └── inspeksjonService.js Bildehåndtering, optimalisering
│
└── public/
├── index.html Bookingsiden (forsiden)
├── admin.html/css/js Admin-panel
├── checkin.html Bilder ved henting
├── checkout.html Bilder ved levering
├── inspeksjon.css/js Felles for innsjekk/utsjekk
├── info.html QR-koden peker hit
├── qr.html Generer klistrelapp i admin
├── img/ec20e.jpg Hero-bilde
└── mock/ Test-sider (Vipps-mock, debug)
- Kunde velger periode i kalenderen og fyller ut skjema
- Vipps-betaling gjennomføres (mock i utvikling)
- Booking havner som "venter godkjenning"
- Admin godkjenner i
/admin.html— iglohome-kode genereres - Kunde får SMS med lenker til henting og levering
- Ved henting: kunde åpner lenken, tar 6 obligatoriske bilder
- Etter alle bilder: kunde får SMS med iglohome-kode
- Kunde bruker maskinen
- Ved levering: nye bilder tas via lenken
- Admin sammenligner før/etter, godkjenner retur eller registrerer skade
| Status | Betydning |
|---|---|
venter_betaling |
Booking opprettet, venter på Vipps-betaling |
venter_godkjenning |
Betalt, venter på manuell godkjenning |
godkjent |
Godkjent, men kunde har ikke tatt innsjekk-bilder |
aktiv |
Innsjekk fullført, kunde har koden |
venter_godkjenning_retur |
Utsjekk-bilder tatt, venter på admin-vurdering |
fullfoert |
Retur godkjent, depositum frigjort |
skade_registrert |
Skade dokumentert, depositum belastes |
avbrutt |
Avvist eller avbestilt |
Mock-modus er kun for utvikling. For å gå live:
- Sett opp egen server (Hetzner, DigitalOcean, etc.) — se SIKKERHET.md
- Kjøp domene og koble til serverens IP
- Få Vipps eCom-konto og fyll inn API-nøkler i
.env - Skaff iglohome-konto med Bridge og enhet
- Velg SMS-leverandør (LinkMobility, Twilio)
- Sett
MOCK_MODE=false(eller fjern variabelen) - Kjør tjenesten med systemd, ha skikkelig backup, HTTPS via Caddy
Detaljert produksjonsguide: SIKKERHET.md
Dette er et MVP. Disse tingene gjenstår eller må gjøres manuelt:
- Vippsrefusjoner håndteres manuelt via Vipps-portalen — ingen automatisk refund-flyt
- Depositum reserveres ikke automatisk — administreres manuelt etter retur
- ID-verifisering skjer kun via avkrysning, ikke BankID
- Skadevurdering krever menneskelig vurdering — ingen AI-skadepåvisning
- GDPR-sletteplan er beskrevet men ikke implementert som automatisk job
Alle disse kan legges til senere uten å endre kjernearkitekturen.
Proprietær. Ikke for distribusjon eller kommersiell bruk uten skriftlig tillatelse.
Kontakt utleier for spørsmål om koden eller systemet.