Website Project Scope

Cleaning company website · 20 October 2026

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.

One server runs the website; three outside services plug in STRATO VPS server, on your domain Outside services Customers and visitorsPhone or computer Your staffAdmin dashboard login Website (React Router)Public pages, quote, booking, portal, admin .NET REST API: the enginePrices, bookings, payments, accounts, emails PostgreSQL databaseCustomers, bookings, prices, translations Cloudflare R2Photos, stored in the EU Payment providersInvoice now; card ready, Swish later STRATO emailMailboxes and booking emails
How the website is put together

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.

PageWhat it contains
HomeShort introduction, main services, "Get a price" button, customer reviews, contact details
ServicesOne page per service (e.g. home cleaning, move-out cleaning, office cleaning, window cleaning) with description and starting price
About usCompany background, team, values, insurance and certifications
Instant quoteThe price calculator (section 2)
ContactContact form, phone, email, opening hours, service area
FAQCommon questions about booking, cancellation and payment
LegalTerms 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:

  1. Type of service (e.g. home, move-out, office, window cleaning)
  2. Property size in square metres, and number of rooms/bathrooms if relevant
  3. Frequency: one-time, weekly, every two weeks or monthly
  4. Optional add-ons, e.g. window cleaning, carpet cleaning, oven, balcony
  5. 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.

The price updates live as the visitor answers YesNo 1. ServiceHome, move-out, office 2. SizeSquare metres, rooms 3. FrequencyOne-time or recurring 4. Add-onsWindows, oven, carpet 5. Postal codeInside service area? Price shown instantlyBase price + size × price per m²+ add-ons − frequency discount Outside the areaContact form shown Book nowChoices carried over Email me the quoteDecide later
Quote logic

3. Online booking system

Customers book online, any time of day, and only see times you can actually deliver.

The booking steps:

  1. Choose service and options (or continue from the quote)
  2. Pick a date and time from a calendar that shows only free slots
  3. Enter address, contact details and notes (door code, pets, keys)
  4. Book as a guest — no account needed. Logging in is only an option for customers who already have an account
  5. Confirm the booking; an invoice is sent after the job (section 4)
  6. Receive a confirmation email with all details and a calendar invite
No account needed to book; logging in only saves typing 1. Date and timeOnly free slots shown 2. Your detailsAddress, phone, notes 3. Continue asThe customer chooses GuestNo account needed Log inDetails filled in Create accountOptional, saves history 4. Booking confirmedTime slot reserved Confirmation emailWith calendar invite ReminderThe day before Job doneStaff marks complete Invoice emailedSee payment flow
Booking logic

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.

Customers change bookings themselves before the deadline YesNo Wants a changeVia email link Before deadline?e.g. 24 h before Self-serviceMove or cancel online DoneConfirmed by email Contact the officePhone or email
Change and cancellation logic

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.

MethodHow it worksStatus 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 overdueActive
Card (Visa, Mastercard)Integrated with Stripe, paid when booking. Built and tested, then switched on when you are ready and your Stripe account is openReady, switched off
SwishAdded later on the same payment module, through Stripe or a Swish Handel agreementFuture

What the system handles:

At launch, invoice is the only active payment YesNoWhen paid Job doneStaff marks complete Invoice createdPDF, bankgiro, reference Invoice emailedDue date you choose Paid by due date?Checked on bankgiro Marked as paidShown in dashboard Reminder emailSent automatically Staff follows upOverdue list in dashboard Card via Stripe Built, switched off When switched on: paid at booking, no invoice needed
Invoice and payment logic

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.

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.

AreaWhat your staff can do
BookingsSee all bookings in a calendar and list view; create, move or cancel bookings; assign a cleaner/team
CustomersSearch customers, see their history, payments and loyalty points
Services & pricesAdd or edit services and add-ons, and change the pricing table used by the quote
AvailabilitySet working hours, number of teams, holidays and blocked days
PaymentsSee payments and refunds, download invoices, export RUT data
Website contentEdit texts, images, FAQ and service descriptions in all four languages
ReportsBookings and revenue per week/month, most booked services
Users & rolesGive 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.

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.

PartTechnologyWhat it does in plain words
Frontend (what the visitor sees)React Router (the latest version of Remix) with TypeScriptBuilds 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)
DatabasePostgreSQLStores customers, bookings, prices, payments and translations
Image storageCloudflare R2Stores and delivers photos fast from servers close to the visitor
Server, domain, emailSTRATOThe 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:

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:

What we can add later as separate projects:

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.

ItemNeeded 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-onsBefore quote development
Booking rules: working hours, number of teams, service durations, cancellation deadlineBefore booking development
Service area (postal codes or cities)Before booking development
STRATO account with VPS, domain and email packageBefore 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 policyBefore 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.

  1. Kick-off — we go through this document together and agree on the scope.
  2. Design — we show page designs for home, services, quote and booking, on phone and computer. You approve the look.
  3. Foundation — server, domain, email, database and test website set up.
  4. Public website and languages — all public pages, editable from the admin dashboard.
  5. Quote and booking — price calculator, calendar, automatic emails.
  6. Payments — invoice active; card built and ready to switch on; reminders (and RUT if confirmed).
  7. Customer portal and admin dashboard.
  8. Testing — you and your staff test everything on the test website; we fix what you find.
  9. Launch — the site goes live on your domain, and we give your staff a short training session.
  10. 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.