Kerbside Car Share

Requirements — Neighbourhood Car Share

1. Purpose

A small private web app that lets up to 10 neighbours rent each other’s cars. Owners list cars with prices, locations and the times they’re available; renters browse (as a list or on a map), see when each car is free, and book it.

2. Scope

| In scope | Out of scope (v1) | |—|—| | Username/password accounts, max 10 members | Online card payments (settled offline between neighbours) | | Car listings with model details, photo, prices | Insurance, damage reports, ID/licence checks | | Owner-defined availability time slots | Owner approval step (bookings are confirmed instantly) | | Instant booking with conflict checks | Email/SMS notifications | | Map of car locations with prices | Native mobile apps (the web app works on phones) | | Owners edit price, availability, listing status | Multiple neighbourhoods / admin panel |

3. Users & roles

4. User stories

Accounts

Browsing

Booking

Owning

5. Pricing rule

total = whole days × daily price + min(leftover hours × hourly price, daily price); partial hours round up. Example at 10/h, 50/day: 3h → 30; 8h → 50 (capped); 26h → 70.

6. Non-functional requirements

| ID | Requirement | |—|—| | NFR-1 | Runs on one ordinary PC/laptop or a small cloud instance; ≤10 users. | | NFR-2 | One dependency (Express); database is a single SQLite file — easy to back up. | | NFR-3 | Passwords hashed with scrypt + per-user salt; sessions in HttpOnly SameSite cookies. | | NFR-4 | Works on phone screens (responsive layout) and in light/dark mode. | | NFR-5 | Map uses OpenStreetMap — no API key or cost. | | NFR-6 | All server input validated; errors returned as friendly messages. | | NFR-7 | Renter identities are only shown to the car owner and the renter themselves. |

7. Acceptance criteria

All user stories above are covered by the checks in TEST_PLAN.md; the automated suite (npm test) must pass.