Website Project Scope
You can comment anywhere: select any text and click Add comment, or use Comment on a diagram. When you're done, click Download with comments and send the file back.
Purpose of this document
This document describes exactly what we will build for your cleaning company's website, so we can agree on the scope before development starts. It is based on your requirements presentation (dated 25 November 2025) and on our technical proposal.
Please read it and tell me if anything is wrong or missing. Anything not described here can be added later as a next step.
How the website works — the big picture
The website has three layers that run on your own server: the pages people see, an "engine" that does the work, and a database that remembers everything. Three trusted outside services handle images, payments and email.
Customers and staff only ever see the website. Every action — getting a price, booking, paying — is passed to the engine (API), which checks it, saves it in the database and talks to the outside services. The sections below describe each part of the website in detail.
1. Public website and company information
These are the pages anyone can visit without logging in. Their job is to build trust and turn visitors into bookings.
| Page | What it contains |
|---|---|
| Home | Short introduction, main services, "Get a price" button, customer reviews, contact details |
| Services | One page per service (e.g. home cleaning, move-out cleaning, office cleaning, window cleaning) with description and starting price |
| About us | Company background, team, values, insurance and certifications |
| Instant quote | The price calculator (section 2) |
| Contact | Contact form, phone, email, opening hours, service area |
| FAQ | Common questions about booking, cancellation and payment |
| Legal | Terms of service, privacy policy (GDPR), cookie policy |
The design will be responsive, meaning it adapts to phones, tablets and computers. Pages are built so search engines (Google) can read them well, including page titles, descriptions and a sitemap in every language.
Your staff can edit texts, images, services and FAQ entries from the admin dashboard (section 6) without contacting us.
2. Instant quote system
Visitors get a price on screen within seconds, without waiting for a call back. They answer a few questions and the price updates live as they change their answers.
What the customer enters:
- Type of service (e.g. home, move-out, office, window cleaning)
- Property size in square metres, and number of rooms/bathrooms if relevant
- Frequency: one-time, weekly, every two weeks or monthly
- Optional add-ons, e.g. window cleaning, carpet cleaning, oven, balcony
- Postal code, to check that the address is inside your service area
How the price is calculated: all prices come from a pricing table that you control in the admin dashboard. For example: a base price per service, a price per square metre, a fixed price per add-on, and a discount per frequency. When you change a price there, the website uses the new price immediately — no programmer needed.
When the customer is happy with the price, one click takes them to booking (section 3) with all their choices already filled in. The quote can also be sent to their email so they can decide later.
3. Online booking system
Customers book online, any time of day, and only see times you can actually deliver.
The booking steps:
- Choose service and options (or continue from the quote)
- Pick a date and time from a calendar that shows only free slots
- Enter address, contact details and notes (door code, pets, keys)
- Book as a guest — no account needed. Logging in is only an option for customers who already have an account
- Confirm the booking; an invoice is sent after the job (section 4)
- Receive a confirmation email with all details and a calendar invite
Availability: you set working days, working hours, how many teams/cleaners are available, and how long each service takes. The calendar uses this to prevent double-bookings. You can also block days (holidays, sick days).
Automatic emails: booking confirmation, reminder the day before, change confirmation, cancellation confirmation and a "How did we do?" review request after the job.
Changes and cancellations: customers can move or cancel a booking themselves up to a deadline you choose (for example 24 hours before). After that, they must contact you.
4. Secure payments
At launch, only invoice (faktura) is active. The full payment infrastructure is built from the start, so card payments (Visa/Mastercard) and later Swish can be switched on without rebuilding anything. Card numbers will never touch our server: the customer enters them on Stripe's secure payment form, and we only receive a "paid" or "failed" answer.
| Method | How it works | Status at launch |
|---|---|---|
| Invoice (faktura) | The system creates a PDF invoice with your bankgiro number and a payment reference, and emails it to the customer after the job. Staff mark it as paid in the admin dashboard; a reminder is emailed automatically if it is overdue | Active |
| Card (Visa, Mastercard) | Integrated with Stripe, paid when booking. Built and tested, then switched on when you are ready and your Stripe account is open | Ready, switched off |
| Swish | Added later on the same payment module, through Stripe or a Swish Handel agreement | Future |
What the system handles:
- Invoice after the job is done, with a due date you set (e.g. 10 or 30 days)
- Automatic payment reminders for overdue invoices
- A PDF invoice, emailed and available in the customer portal
- Every invoice, paid or unpaid, visible in the admin dashboard
- When card payment is switched on: payment at booking and automatic refunds when a booking is cancelled in time
Invoice payments go straight to your bankgiro. When you want card payments, you open a Stripe account in your company's name and we switch it on; card fees are then paid by you directly to Stripe. Swish is added the same way, on the payment module that already exists.
RUT deduction (rutavdrag): most Swedish cleaning customers expect to pay only 50% of the labour cost, with your company claiming the rest from Skatteverket. If you want this, the booking form collects the customer's personal identity number, shows the price after RUT, and the admin dashboard exports the data you need for the claim. Please let me know whether RUT should be included.
5. Customer portal ("My pages")
An account is optional. Anyone can get a quote, book and pay without creating an account. Customers who choose to create one get a personal area where they can follow their booking history and don't have to type their details again. It reduces phone calls and emails to your office.
- Login: email and password, with "forgot password" by email. Passwords are stored encrypted (hashed) — nobody, including us, can read them.
- My bookings: upcoming and past bookings; move, cancel or rebook the same service with one click.
- Recurring cleaning: see and manage a weekly or bi-weekly schedule.
- Invoices and receipts: download all invoices as PDF.
- Saved details: addresses (e.g. home and summer house), phone, preferred language.
- Loyalty programme: customers earn points per completed booking and use them as a discount. You set the rules in the admin dashboard (e.g. 1 point per 10 SEK, 500 points = 50 SEK off).
- My data (GDPR): customers can download their data or ask for their account to be deleted.
6. Admin dashboard (for your staff)
Your presentation focuses on the customer side; to run it day to day, your team also needs a private control panel. It is included in this scope.
| Area | What your staff can do |
|---|---|
| Bookings | See all bookings in a calendar and list view; create, move or cancel bookings; assign a cleaner/team |
| Customers | Search customers, see their history, payments and loyalty points |
| Services & prices | Add or edit services and add-ons, and change the pricing table used by the quote |
| Availability | Set working hours, number of teams, holidays and blocked days |
| Payments | See payments and refunds, download invoices, export RUT data |
| Website content | Edit texts, images, FAQ and service descriptions in all four languages |
| Reports | Bookings and revenue per week/month, most booked services |
| Users & roles | Give staff accounts with different rights, e.g. Admin (everything) and Staff (bookings only) |
Staff receive an email when a new booking or cancellation comes in.
7. Languages
The whole website — public pages, quote, booking, customer portal and all automatic emails — is available in Swedish, English, French and Norwegian.
- Language switcher in the header on every page, always one click away.
- Automatic detection: on the first visit, the site opens in the visitor's browser language. If it is not one of the four, Swedish is shown. The visitor's choice is remembered.
- Separate addresses per language (e.g. /sv/tjanster and /en/services), so Google shows the right language in each country.
- AI translations: we write the texts in Swedish or English and translate them into the other languages with AI, then check them for tone and correct terms. Nothing is translated automatically while visitors browse; the finished translations are saved, and your staff can correct any wording later in the admin dashboard.
- Admin dashboard language: English and Swedish (staff only).
8. Technology we will use
We keep React and PostgreSQL from your recommendations, and replace Laravel/Django with .NET for the backend. All of these are mature, widely used, free of licence costs and well supported for many years.
| Part | Technology | What it does in plain words |
|---|---|---|
| Frontend (what the visitor sees) | React Router (the latest version of Remix) with TypeScript | Builds the pages. Pages are prepared on the server before they reach the browser, so they load fast and Google can read them — the same benefit Next.js gives |
| Backend (the engine) | .NET REST API (C#, latest long-term-support version) | Handles prices, bookings, payments, accounts and emails. The website talks to it through a clearly defined interface (an API) |
| Database | PostgreSQL | Stores customers, bookings, prices, payments and translations |
| Image storage | Cloudflare R2 | Stores and delivers photos fast from servers close to the visitor |
| Server, domain, email | STRATO | The rented server (VPS) the site runs on, your domain name and company email |
Why .NET instead of Laravel or Django? It does the same job with equal security, and it is very fast and strictly typed, which catches many errors before they reach production. It is also the platform our team specialises in, so you get faster delivery and easier maintenance.
Why a separate API? Because the "engine" is separate from the pages, a mobile app, an employee app or an integration with an accounting system can later use the same engine without rebuilding it (see section 10).
9. Hosting, email, security and backups
Server (STRATO VPS): the website, API and database run on one Linux server rented from STRATO in your company's name. Each part runs in its own isolated container (Docker), which makes updates safe and the setup easy to move to a bigger server later.
Domain (STRATO): your web address, e.g. yourcompany.se. Additional domains (.no, .fr) can point to the same site if you want.
Email (STRATO): your staff mailboxes (e.g. info@yourcompany.se), also used to send the automatic booking emails. We configure the email security records (SPF, DKIM, DMARC) so the emails land in the inbox, not in spam.
Images (Cloudflare R2): photos uploaded in the admin dashboard are stored at Cloudflare and delivered quickly worldwide, which keeps the server light. Storage is set to EU.
Security:
- HTTPS (padlock) on every page, with a free certificate that renews automatically
- Encrypted passwords, protection against common attacks, and limits on repeated login attempts
- Firewall on the server; only the needed ports are open
- Staff access based on roles (section 6)
Backups: the database is backed up automatically every night and copied off the server, so data survives even if the server fails. Backups are kept for 30 days.
GDPR: cookie consent banner, privacy policy page, data stored in the EU, and customers can export or delete their data.
10. Built for future growth
The system is built in separate modules (quote, booking, payments, portal, content), so new features can be added without redesigning what exists.
What you can do yourself, with no development:
- Add new services, add-ons and prices
- Expand the service area with new postal codes
- Add staff accounts and teams
What we can add later as separate projects:
- A new language or a new country/market
- A mobile app for customers, or an app for cleaners (job list, check-in/out), using the same API
- Integration with accounting software (e.g. Fortnox or Visma)
- Swish payments, and SMS reminders
- Business customer contracts with monthly invoicing
If traffic grows, the server can be upgraded at STRATO, or the containers moved to a larger host, without changing the code.
11. What we need from you
These items are needed to start and finish on time. Accounts should be opened in your company's name so you own them.
| Item | Needed by |
|---|---|
| Logo, brand colours, fonts (if you have them) | Design phase |
| Company texts: about us, services, FAQ (in Swedish or English) | Design phase |
| Photos of your team and work (or approval to use stock photos) | Design phase |
| Full service list with your pricing table and add-ons | Before quote development |
| Booking rules: working hours, number of teams, service durations, cancellation deadline | Before booking development |
| Service area (postal codes or cities) | Before booking development |
| STRATO account with VPS, domain and email package | Before first test version |
| Cloudflare account (for R2 image storage) | Before first test version |
| Your bankgiro number for invoices (a Stripe account only when you want card switched on) | Before payment development |
| Terms of service and cancellation policy | Before launch |
12. How the project runs
We work in phases, and you approve each one before we move on. You get a private test website early, so you can click through real features instead of only reading about them.
- Kick-off — we go through this document together and agree on the scope.
- Design — we show page designs for home, services, quote and booking, on phone and computer. You approve the look.
- Foundation — server, domain, email, database and test website set up.
- Public website and languages — all public pages, editable from the admin dashboard.
- Quote and booking — price calculator, calendar, automatic emails.
- Payments — invoice active; card built and ready to switch on; reminders (and RUT if confirmed).
- Customer portal and admin dashboard.
- Testing — you and your staff test everything on the test website; we fix what you find.
- Launch — the site goes live on your domain, and we give your staff a short training session.
- Support period — we fix any errors found during the first 90 days after launch.
A detailed timeline with dates will follow once this scope is confirmed.
13. Not included in this project
To avoid misunderstandings, these are not part of this scope. Each can be quoted separately.
- Mobile apps (iOS/Android) for customers or cleaners
- Integration with accounting or payroll software
- Writing the original website texts (unless agreed separately)
- Professional photography
- Ongoing marketing: Google Ads, social media, SEO campaigns
- Monthly costs for STRATO, Cloudflare and payment provider fees (paid by you directly)
- Ongoing maintenance and updates after the 90-day support period (offered as a separate monthly agreement)