Appearance
Projects (Prosjekter)
The Projects module lets you manage project-based work — track materials, log time, link supplier invoices, and generate customer invoices directly from your project data. Built for tradespeople, consultants, and service companies who need to know what a project costs, what to bill, and what the margin is.
Creating a Project
- Click Projects in the sidebar
- Click + New Project
- Fill in the form:
- Project name — a descriptive name (e.g., "Bathroom renovation — Olsen")
- Customer — search and select an existing client from your client register
- Description — optional project description
- Billing type — how you'll invoice the customer:
- Time and materials — bill for actual hours worked + materials used (with markup)
- Fixed price — a quoted amount agreed with the customer upfront
- By agreement — custom terms between you and the customer
- Budget — shown when billing type is "Fixed price"; sets a budget cap so you can track how much you've spent vs. quoted
- Default markup — percentage added on top of material purchase prices to calculate the customer price (default: 20%)
- Default hourly rate — what you charge the customer per hour (pre-filled from your company settings)
- Internal hourly cost — what an hour actually costs your company (salary + employer taxes + overhead). Used to calculate real margin on labor — the customer never sees this number
- Reference / PO — customer's purchase order number or reference
- Project address — where the work is being done
- Notes — internal notes for your team
- Click New Project to create
The project starts in Tilbud (Draft) status and gets an auto-generated number like PRJ-0001.
Project Statuses
Projects move through a lifecycle:
| Status | Meaning |
|---|---|
| Tilbud (Draft) | Project is quoted/proposed but work hasn't started. |
| Aktiv (Active) | Work is in progress. Materials can be added, time can be logged. |
| Fakturering (Invoicing) | Work is done. You're generating invoices for the customer. |
| Ferdig (Done) | Everything is invoiced and the project is complete. |
| Kansellert (Cancelled) | Project was cancelled. Unpaid invoices are auto-cancelled; paid invoices are kept as history. |
Changing Status
Click the status badge on the project detail page to see the available status transitions. A dropdown appears showing which statuses you can move to from the current one.
Allowed transitions
- Draft → Active, Cancelled
- Active → Invoicing, Done, Cancelled
- Invoicing → Active (reopen), Done, Cancelled
- Done → Active (reopen, with confirmation), Cancelled
- Cancelled → Draft, Active
What happens when you cancel a project
When you cancel a project:
- All unpaid linked invoices (Draft, Sent, Viewed, Overdue, Reminded, Collection Warning) are automatically set to Cancelled
- Paid invoices are kept as-is — money doesn't un-pay itself
- Credited invoices are also kept untouched
- Each cancelled invoice gets an entry in its history timeline explaining why it was cancelled
The Project Detail Page
The project detail page is the central hub for managing a project. It shows:
Header
- Back arrow — returns to the project list
- Project name and project number (PRJ-XXXX)
- Customer name — clickable link to the client's detail page
- Status badge — click to change status
- Edit button — opens the edit form
- + Create Invoice button — opens the invoice generator
Finance Summary Cards
Four cards showing the project's financial health at a glance:
| Card | What it shows |
|---|---|
| Cost | Total cost of all purchased materials (all purchased, not just used — this is real cash spent) |
| Revenue | Total billable amount (used materials × customer price + hours × hourly rate). The card shows a stacked bar split into the cost portion and the margin portion — hover over the bar to see the cost breakdown without leaving the overview. |
| Margin | Revenue minus cost, with percentage. Shows whether the project is profitable. A negative margin means you've spent more than you've billed. |
| Invoiced | Amount already invoiced vs. total billable. Shows how much work is billed and how much remains. |
If you set a budget on the project, a fifth card appears showing a progress bar with how much of the budget has been used.
Tabs
The detail page has four tabs:
Materials Tab
Track materials purchased for the project and what you bill the customer.
Adding a Material
Click + Add Material to open the inline form:
| Field | Description |
|---|---|
| Material | Name of the material (e.g., "Green Paint") |
| Category | Optional grouping (e.g., Paint, Lumber, Plumbing, Electrical) |
| Unit | Measurement unit: pcs, liter, meter, kg, m², pack, box, roll |
| Quantity purchased | How many units you bought |
| Quantity used | How many you actually used on this project (defaults to 0 — fill in later) |
| Purchase price per unit | What you paid per unit, excluding VAT |
| Markup % | Percentage added to the purchase price (pre-filled from the project's default markup) |
| VAT rate | Pick from the full Norwegian VAT codes (0%, 12%, 15%, 25%). Most physical materials are 25% (standard) or 15% (food). 0% covers exempt/export. The 12% rate is for transport, broadcasting and similar — rare for materials. |
The customer unit price is calculated automatically:
Customer price = Purchase price × (1 + Markup% / 100)For example: 280 kr purchase price × 1.20 (20% markup) = 336 kr customer price.
Inline Editing
The Purchased and Used columns are click-to-edit. Click the number, type a new value, and press Enter to save. Press Escape to cancel. The finance cards update immediately.
Validation: Quantity used cannot exceed quantity purchased. If you try, an error message appears.
Material Costs and Margin
The table footer shows running totals:
- Purchase total — total cash spent on all purchased materials (all units, not just used)
- Customer total — total billable based on what was actually used
- Margin — customer total minus purchase total
If you bought more than you used, the margin may be negative. The Unused inventory warning (in orange) shows how much of the cost is leftover material sitting on your shelf. If you reuse it on a future project, that cash is recovered.
Editing and Deleting
Each material row has a pencil icon (edit) and a trash icon (delete). Both are only available on uninvoiced materials. Once a material has been invoiced, it's locked.
Time Tab
Log hours worked on the project.
Adding a Time Entry
Click + Log Time to open the inline form:
| Field | Description |
|---|---|
| Date | When the work was done |
| Hours | How many hours (max 24 per entry) |
| Description | What work was done (optional but recommended) |
| Hourly rate | What the customer pays per hour (pre-filled from the project's default hourly rate) |
Understanding Hourly Rates
- Default hourly rate (set on the project) — what the customer pays. Shows on the invoice.
- Internal hourly cost (set on the project) — what the hour costs your company. Used to calculate real margin. The customer never sees this.
Example: You charge the customer 400 kr/hour, but your employee costs you 360 kr/hour (salary + employer taxes + overhead). Your real margin is 40 kr/hour.
Invoices Tab
Shows all invoices generated from this project.
| Column | Description |
|---|---|
| Number | Invoice number (e.g., INV-0023) |
| Type | Partial or Final |
| Date | When the invoice was created |
| Amount | Total invoice amount |
| Status | Draft, Sent, Paid, etc. |
Click a row to open the invoice in the standard invoice detail view.
Click + Create Invoice from Project to open the invoice generator.
Supplier Invoices Tab
Link existing received (incoming) supplier invoices to the project. This helps you track project costs and know which supplier invoices relate to which project.
Linking a Supplier Invoice
- Click + Link Supplier Invoice
- A modal opens with a searchable list of all your received invoices
- Click one to link it
- Optionally add a note (e.g., "Paint order from Fargerike")
Unlinking
Click the × button on a linked supplier invoice to remove the link. This does not delete the supplier invoice itself — it just removes the association with this project.
Generating Invoices from a Project
Click + Create Invoice on the project detail page (or + Create Invoice from Project on the Invoices tab) to open the invoice generator.
How It Works
The generator shows two columns:
Left side — Selection checklist:
- Materials section: all uninvoiced materials with quantity used > 0, each with a checkbox
- Time section: all uninvoiced time entries, each with a checkbox
- Each section has a Select all master checkbox
- Items that have already been invoiced don't appear here
Right side — Live preview:
- Shows line items, subtotal, VAT (25%), and total
- Updates in real-time as you check/uncheck items
- Material lines show customer-facing info only (name, quantity used, customer price) — purchase price and markup are never shown to the customer
Two Actions
| Button | What it does |
|---|---|
| Create Invoice | Creates a draft invoice with the selected items. Project stays in its current status. Use this for interim/partial billing while work continues. |
| Close Project | Creates a draft invoice with the selected items AND transitions the project to "Invoicing" status. Opens a confirmation modal first explaining what will happen. Use this when all work is done and you're sending the final invoice. |
After Generation
The draft invoice opens in the standard invoice edit view where you can review, modify, and send it. Once you send the invoice:
- The linked materials and time entries are marked as Invoiced (green badge)
- They no longer appear in future invoice generation checklists
- The finance summary's Invoiced amount updates
Duplicate Protection
If you generate a draft invoice but forget to send it, then come back and generate another one — the system automatically cleans up the old orphaned draft. You'll never end up with duplicate draft invoices for the same items.
Project Settings Defaults
Go to Settings → Payment to configure default values that pre-fill when creating new projects:
| Setting | Description |
|---|---|
| Default project markup % | Standard markup applied to material purchase prices. Can be overridden per project. |
| Default hourly rate | Standard customer-facing hourly rate. Can be overridden per project or per time entry. |
These save time when creating multiple projects with similar pricing structures.
Project Templates
If you run similar projects repeatedly (e.g. "Standard bathroom renovation", "Annual service contract"), save one as a template to skip the setup the next time.
- Open an existing project and click Save as Template
- When creating a new project, pick the template from the dropdown — billing type, markup, hourly rate, and notes pre-fill
- You can still edit any field before saving the new project
Templates only carry the project shell — they don't copy materials, time entries, or invoices.
Detailed List View
The Projects list has a Detailed view toggle in the top-right that switches each row from a compact summary to a fuller card showing per-project finance numbers (cost, revenue, margin, invoiced) at a glance. Useful when you want to scan financial health across projects without opening each one.
Managing Projects from the List
The project list shows all your projects with financial summaries per row.
3-Dot Menu
Each project row has a ⋮ menu with:
| Action | Description |
|---|---|
| View | Opens the project detail page |
| Edit | Opens the project edit form |
| Cancel Project | Cancels the project and auto-cancels unpaid linked invoices. Paid invoices are preserved. Shows a confirmation dialog. |
| Delete | Permanently deletes the project. Only available if no materials/time entries have been invoiced and no invoices have been sent. The safer option is usually to cancel instead. |
Filters
Use the status filter buttons at the top to show only projects in a specific status (All / Draft / Active / Invoicing / Done / Cancelled).
Use the search field to filter by project name, number, or reference.
Summary Cards
Three summary cards above the list show:
- Active Projects — count of projects with Active status
- Total Uninvoiced — sum of remaining unbilled amounts across all non-complete projects
- Average Margin — average margin percentage across active/invoicing projects
