# DEVELOPER GUIDE ## Dach Construction Management System ### Prepared by Insight Innovations Ltd --- ## OVERVIEW This guide covers everything a developer needs to build the Dach CMS using PHP Laravel, HTML and MySQL. Every feature, screen, table and relationship in this guide maps directly to what is built and designed in the frontend prototype. **Technology Stack** - Backend: PHP Laravel 11 - Frontend: HTML, Tailwind CSS, JavaScript - Database: MySQL - Charts: Chart.js 4.x - Icons: Font Awesome 6.x --- ## SYSTEM LAYOUT The system has one master layout. A fixed left sidebar contains all navigation links. The main content area on the right renders each page. The top bar shows the current page title, a search input, the current date and the company name. **Sidebar Footer** Shows logged in user name, role and initials avatar. In the prototype: John Doe, Managing Director. **Top Bar** - Page title — updates on every navigation - Live indicator — green pulsing dot labeled All Systems Live - Search input - Date selector showing current month - Company name and logo --- ## MODULE 1 — DASHBOARD ### What It Shows The first page after login. Pulls live data from every other module and shows it in one place. ### Stat Cards — Top Row Five cards across the top: - Total Revenue — amount and month on month percentage change - Total Expenses — amount and percentage change - Net Profit — amount and margin percentage - Active Projects — count and at risk vs on track breakdown - Cash Position — amount and weeks runway Each card is clickable and navigates to the relevant module page. ### Revenue vs Cost Trend Chart Line chart showing two lines — Revenue and Costs — over the last 30 days. Labels are daily dates. Rendered using Chart.js. Data comes from transactions grouped by day. ### Project Performance Panel Right side of the chart row. Shows top 3 projects by profit as clickable cards with rank number, project name, profit amount and margin. Below that shows the worst performing project highlighted in red. ### Live Projects Table Bottom of the dashboard. Shows 5 projects in a table with columns: Project name, Progress bar, Budget, Spent, Profit, Status badge. Every row is clickable and opens the project detail page. ### Database Tables Used - projects - project_financials - transactions - bank_accounts ### Controller `DashboardController@index` - Total revenue — sum of all income transactions - Total expenses — sum of all expense transactions - Net profit — revenue minus expenses - Active project count - Cash balance from bank accounts - Top 5 projects ordered by profit descending - Worst project — lowest profit - 30 day revenue and cost data grouped by date for chart ### Route ``` GET /dashboard ``` --- ## MODULE 2 — PROJECTS ### Pages 1. Projects list page 2. Project detail page — opened when any project card is clicked ### Projects List Page **Stat Cards** - Active Projects count - Total Contract Value - Average Completion percentage **Project Cards Grid** Three columns. Each card shows: - Status badge — On Track (green) or At Risk (red) - Due date - Project name - Short description - Client name - Progress bar with percentage - Budget and Profit figures at bottom - Team member avatar initials Every card is clickable. Clicking opens the project detail page. **New Project Button** Opens a modal form to create a new project. ### Project Detail Page Opened by clicking any project card, any dashboard table row or any project name in other modules. **Header Section** - Status badge - Location - Start date - Project name as heading - Client name and due date - View Invoices button — navigates to Invoices page - Edit button — opens edit modal **Stat Cards** Four cards: Contract Value, Amount Spent, Profit or Loss, Margin **Progress Bar** Full width bar showing completion percentage. Below it shows budget used percentage and due date. **Three Panels** - Project Team — employee name and role for each team member - Recent Transactions — description, date and amount for transactions linked to this project - Invoices — invoice number, date, amount and status badge for each invoice linked to this project. Each invoice is clickable and opens invoice detail. ### Database Tables **projects** ``` id, name, description, client_id, location, start_date, due_date, budget, contract_value, progress_percentage, status, created_by, created_at, updated_at ``` **project_team** ``` id, project_id, employee_id, created_at ``` ### Controllers `ProjectController@index` — all projects with financial summary `ProjectController@show` — single project with team, transactions and invoices `ProjectController@store` — create new project `ProjectController@update` — update project details ### Routes ``` GET /projects GET /projects/{id} POST /projects PUT /projects/{id} ``` ### New Project Modal Fields - Project Name - Description - Budget (MWK) - Due Date - Status — On Track or At Risk --- ## MODULE 3 — CLIENTS ### Pages 1. Client list page 2. Client detail page — opened when View button is clicked on any client row ### Client List Page **Stat Cards** - Total Clients - Active Contracts - Total Receivable - Overdue amount **Clients Table** Columns: Client Name, Contact Person, Phone, TIN Number, Projects count, Outstanding Balance, Status badge, View button Status badge: Good Standing (green) or Overdue (red) ### Client Detail Page **Header** - Client name as heading - Contact person, phone and email - TIN number - Status badge **Stat Cards** Three cards: Active Projects, Outstanding Balance, Total Invoiced **Two Panels** - Projects panel — all projects for this client shown as clickable cards. Each card shows project name, location, due date, profit and status. Clicking opens project detail page. - Invoice History panel — all invoices for this client shown as clickable cards. Each card shows invoice number, description, date, amount and status. Clicking opens invoice detail page. ### Database Tables **clients** ``` id, company_name, contact_person, phone, email, tin_number, status, created_by, created_at, updated_at ``` ### Controllers `ClientController@index` — all clients with outstanding balances `ClientController@show` — single client with their projects and invoices `ClientController@store` — create new client ### Routes ``` GET /clients GET /clients/{id} POST /clients ``` ### Add Client Modal Fields - Client Name - Contact Person - Phone - TIN Number --- ## MODULE 4 — FINANCE & COSTS ### Page Single page. No sub-pages or detail views. ### Stat Cards Four cards: Total Budget, Total Invoiced, Received, Outstanding ### Recent Transactions Table Columns: Date, Description, Project, Amount, Type badge Income rows show amount in green. Expense rows show amount in red. ### Cost Breakdown Panel Right side. Five horizontal progress bars showing: - Materials — MWK 22.4M — 42% - Labour — MWK 18.7M — 35% - Equipment — MWK 9.1M — 17% - Subcontractors — MWK 8.2M — 15% - Transport — MWK 2.8M — 5% ### Expenses Pending Approval Table Columns: Date, Staff, Description, Project, Amount, Action Pending expenses show two buttons — Approve and Reject. Clicking Approve changes the status to Approved and replaces buttons with a green badge. Clicking Reject changes the status to Rejected. ### Database Tables **transactions** ``` id, project_id, description, amount, transaction_type, transaction_date, reference, created_by, created_at, updated_at ``` **expenses** ``` id, project_id, employee_id, description, amount, category, expense_date, status, approved_by, approved_at, created_at, updated_at ``` ### Controllers `FinanceController@index` — transactions and pending expenses `FinanceController@approveExpense` — update expense status to approved `FinanceController@rejectExpense` — update expense status to rejected `FinanceController@storeTransaction` — save new transaction `FinanceController@storeExpense` — save new expense submission ### Routes ``` GET /finance POST /finance/transactions POST /finance/expenses PUT /finance/expenses/{id}/approve PUT /finance/expenses/{id}/reject ``` ### Add Transaction Modal Fields - Description - Project — dropdown of all projects - Amount (MWK) - Type — Income or Expense ### Submit Expense Modal Fields - Description - Project — dropdown of all projects - Amount (MWK) --- ## MODULE 5 — INVOICES ### Pages 1. Invoice list page 2. Invoice detail page — opened when any row is clicked ### Invoice List Page **Stat Cards** Four cards: Total Invoiced, Paid, Outstanding, Overdue **Filter Tabs** Four clickable badges above the table: All, Pending, Overdue, Paid. Clicking each filters the table to show only invoices with that status. **Invoices Table** Columns: Invoice #, Client, Project, Date, Amount, MRA Fiscal Code, Status badge, View button Every row is clickable and opens the invoice detail page. ### Invoice Detail Page Opened by clicking any invoice row, any View button or any invoice link from the project detail page or client detail page. **Header** - Status badge - MRA fiscal code in a green badge - Invoice number as heading - Client name and project name - Invoice date and due date - Total amount displayed large - Download PDF button - Record Payment button — only shown if status is not Paid **Two Information Panels** - Invoice Description panel — description text and client name - MRA Fiscal Details panel — fiscal code, fiscalised date and note that client can verify on MRA portal **Line Items Table** Columns: Description, Qty, Rate, Total **Totals Section** Bottom right showing: Subtotal, VAT note (Included), Total amount in blue ### Database Tables **invoices** ``` id, invoice_number, client_id, project_id, description, amount, vat_amount, total_amount, invoice_date, due_date, status, mra_fiscal_code, fiscalised_at, created_by, created_at, updated_at ``` **invoice_items** ``` id, invoice_id, description, quantity, unit_rate, total, created_at ``` ### Controllers `InvoiceController@index` — all invoices `InvoiceController@show` — single invoice with line items `InvoiceController@store` — create new invoice `InvoiceController@filterByStatus` — filter invoices by status `InvoiceController@recordPayment` — update invoice status to paid ### Routes ``` GET /invoices GET /invoices?status={status} GET /invoices/{id} POST /invoices PUT /invoices/{id}/payment ``` ### New Invoice Modal Fields - Client - Project — dropdown - Amount (MWK) - Description On save: generate sequential invoice number, assign MRA fiscal code, set status to Pending, show success toast. --- ## MODULE 6 — QUOTATIONS ### Pages 1. Quotation list page 2. Quotation detail page — opened when any row is clicked ### Quotation List Page **Stat Cards** Four cards: Total, Pending, Approved, Total Value **Quotations Table** Columns: Ref #, Client, Description, Date, Value, Status badge, View button Every row is clickable and opens the quotation detail page. ### Quotation Detail Page **Header** - Status badge - Reference number - Description as heading - Client name and date issued - Valid for 30 days note - Total value displayed large - Export PDF button - Convert to Project button — shown only when status is Pending **Line Items Table** Columns: Description, Qty, Rate, Total **Total Quoted Value** Shown bottom right of the line items table. **Client Information Panel** Below the line items table showing client name, reference number and date issued. ### Database Tables **quotations** ``` id, reference_number, client_id, description, total_value, issue_date, valid_until, status, created_by, created_at, updated_at ``` **quotation_items** ``` id, quotation_id, description, quantity, unit_rate, total, created_at ``` ### Controllers `QuotationController@index` — all quotations `QuotationController@show` — single quotation with line items `QuotationController@store` — create new quotation `QuotationController@convertToProject` — create a new project from an approved quotation ### Routes ``` GET /quotations GET /quotations/{id} POST /quotations POST /quotations/{id}/convert ``` ### New Quotation Modal Fields - Client - Description - Value (MWK) On save: generate sequential reference number, set status to Pending, show success toast. --- ## MODULE 7 — CASH FLOW ### Page Single page. No sub-pages or detail views. ### Stat Cards Four cards: Current Balance, Expected In (30 days), Going Out (30 days), Net Position ### Money In Table Columns: Client, Project, Amount (shown in green), Date Shows all payments received this month from clients. ### Money Out Table Columns: Payable To, Type, Amount (shown in red), Due Shows all payments due this month to suppliers, payroll and others. ### Database Tables **cash_inflows** ``` id, client_id, project_id, inflow_type, description, amount, expected_date, actual_date, is_received, created_at ``` **cash_outflows** ``` id, project_id, outflow_type, description, amount, due_date, is_paid, created_at ``` ### Controller `CashFlowController@index` - Sum all received inflows this month - Sum all pending outflows this month - Calculate net position - Current bank balance ### Route ``` GET /cashflow ``` --- ## MODULE 8 — PAYROLL & HR ### Page Single page. No sub-pages or detail views. ### Stat Cards Four cards: Total Employees, Monthly Payroll, Attendance Rate, On Leave count ### Employee Directory Table Columns: Name, Role, Project, Salary, Type badge, Status badge Type badge: Permanent, Casual or Daily Status badge: Active (green) or On Leave (amber) ### Database Tables **employees** ``` id, first_name, last_name, job_title, department, employment_type, basic_salary, project_id, bank_account_number, start_date, status, created_by, created_at, updated_at ``` **payroll_runs** ``` id, period_start, period_end, payment_date, total_gross, total_deductions, total_net, status, approved_by, created_at ``` ### Controller `PayrollController@index` — employees list with payroll stats ### Route ``` GET /payroll POST /employees ``` ### Add Employee Modal Fields - Full Name - Role / Title - Assigned Project — dropdown - Salary (MWK) - Type — Permanent, Casual or Daily --- ## MODULE 9 — INVENTORY ### Page Single page. No sub-pages or detail views. ### Stat Cards Three cards: Total Materials, Low Stock Alerts, Stock Value ### Materials Table Columns: Material, Stock quantity, Min Required, Unit, Status badge Status badge logic: - Critical (red) — stock below 30 percent of minimum - Low (amber) — stock below minimum - OK (green) — stock at or above minimum Stock quantity shown in red text when status is Critical or Low. ### Issue Materials Button Opens Issue Materials modal. On save reduces the stock quantity of the selected material and recalculates the status. ### Database Tables **materials** ``` id, name, unit_of_measure, current_stock, minimum_stock_level, last_purchase_price, created_by, created_at, updated_at ``` **stock_movements** ``` id, material_id, project_id, movement_type, quantity, unit_cost, total_cost, moved_by, created_at ``` ### Controller `InventoryController@index` — all materials with calculated status `InventoryController@store` — add new material `InventoryController@issue` — issue materials to a project, reduce stock and recalculate status ### Routes ``` GET /inventory POST /materials POST /materials/issue ``` ### Add Item Modal Fields - Material Name - Current Stock — number - Minimum Required — number - Unit ### Issue Materials Modal Fields - Material — dropdown of all existing materials - Project — dropdown of all projects - Quantity — number --- ## MODULE 10 — PROCUREMENT ### Page Single page. No sub-pages or detail views. ### Stat Cards Four cards: Active POs, Pending Delivery, This Month value, Suppliers count ### Purchase Orders Table Columns: PO #, Supplier, Items description, Amount, Status badge Status badge: Delivered (green), In Transit (amber), Pending (grey) ### Database Tables **suppliers** ``` id, company_name, contact_person, phone, email, payment_terms_days, is_approved, created_at, updated_at ``` **purchase_orders** ``` id, po_number, supplier_id, project_id, items_description, total_amount, status, po_date, created_by, created_at, updated_at ``` ### Controller `ProcurementController@index` — all purchase orders with supplier details ### Routes ``` GET /procurement POST /purchase-orders ``` ### New Purchase Order Modal Fields - Supplier - Items description - Amount (MWK) - Status — Pending, In Transit or Delivered On save: generate sequential PO number, show success toast. --- ## MODULE 11 — PROGRESS TRACKING ### Page Single page. Two panels side by side. No sub-pages or detail views. ### Left Panel — Project Milestones A vertical timeline list. Each milestone shows: - Icon circle — checkmark for done (green), hammer for active (blue), clock for pending (grey) - Connecting line between milestones - Milestone name — grey text if pending, dark if done or active - Project name and date in small text below — blue text if active ### Right Panel — Project Progress A list of all projects each with: - Project name — clickable, links to project detail page - Completion percentage - Progress bar — red if At Risk, blue if On Track ### Database Tables **milestones** ``` id, project_id, name, planned_date, actual_date, value, status, completed_by, created_at, updated_at ``` **daily_site_updates** ``` id, project_id, update_date, work_completed, labour_count, issues_noted, submitted_by, created_at ``` ### Controller `TrackingController@index` — all milestones and all project progress bars `TrackingController@storeMilestone` — add new milestone `TrackingController@storeDiaryEntry` — submit daily site update ### Routes ``` GET /tracking POST /milestones POST /site-updates ``` ### Add Milestone Modal Fields - Milestone Name - Project — dropdown - Target Date - Status — pending, active or done ### Daily Update Modal Fields - Project — dropdown - Work Completed Today - Workers on Site — number - Issues or Delays --- ## MODULE 12 — DOCUMENTS ### Page Single page. No sub-pages or detail views. ### Folder Cards Four clickable folder cards across the top: - Contracts — 24 files — blue icon - Blueprints — 67 files — green icon - Permits — 12 files — amber icon - Reports — 38 files — violet icon Clicking any folder card shows a toast notification confirming the folder was opened. ### Recent Documents List Below the folder cards. Each document shows: - File type icon with colour — PDF is red, Excel is green, image is blue - File name — truncated if too long - Modified time — e.g. 2h ago, Yesterday, 3 days ago - Download icon on the right Clicking any document shows a toast confirming it is opening. ### Database Tables **documents** ``` id, project_id, document_category, document_type, title, file_name, file_path, file_size, mime_type, uploaded_by, created_at, updated_at ``` ### Controller `DocumentController@index` — recent documents grouped by category `DocumentController@store` — upload document and store file `DocumentController@download` — serve file download ### Routes ``` GET /documents POST /documents GET /documents/{id}/download ``` ### Upload Document Modal Fields - File Name - Category — Contract, Blueprint, Permit, Report, Invoice or BOQ --- ## MODULE 13 — REPORTS & ANALYTICS ### Page Single page with 5 tabs. Clicking a tab shows that report and hides the others. ### Tab 1 — Profit & Loss Left column: - Revenue section — breakdown by project with total - Cost of Sales section — breakdown by category (Materials, Labour, Equipment, Subcontractors, Transport) with total Right column: - Gross Profit card in green — amount and margin percentage - Operating Expenses section — Administration, Office Costs, Other Overheads with total - Net Profit card in blue — amount and margin percentage Period shown: Current month year to date at top right. ### Tab 2 — Balance Sheet Left column: - Assets heading in blue - Current Assets section — Cash & Bank, Accounts Receivable, Stock on Hand with subtotal - Non-Current Assets section — Equipment & Plant, Vehicles with subtotal - Total Assets card in blue Right column: - Liabilities & Equity heading in red - Current Liabilities section — Accounts Payable, VAT Payable, PAYE Payable with subtotal - Non-Current Liabilities section — Bank Loan with subtotal - Equity section — Share Capital, Current Year Profit with subtotal - Total Liabilities & Equity card in dark ### Tab 3 — Trial Balance Table with columns: Account, Type badge, Debit (MWK), Credit (MWK) Accounts shown: Cash & Bank, Accounts Receivable, Stock on Hand, Fixed Assets, Accounts Payable, Bank Loan, Revenue, Cost of Sales Totals row at bottom with total debits and total credits. ### Tab 4 — Assets & Liabilities Two panels side by side: Assets Register table columns: Asset, Cost, Depreciation, Net Value Shows: Excavator (2023), Concrete Mixer x3, Vehicles x4 — with totals row Liabilities Register table columns: Liability, Original, Outstanding, Monthly Shows: NBS Bank Loan, Vehicle HP, Accounts Payable — with totals row ### Tab 5 — Project Reports Table with columns: Project, Contract Value, Costs, Profit, Margin, Progress bar with percentage Every row is clickable and opens the project detail page. Export PDF button in top right exports the current active report tab. ### Database Tables **chart_of_accounts** ``` id, account_code, account_name, account_type, parent_account_id, is_active, created_at ``` **journal_lines** ``` id, journal_entry_id, account_id, project_id, debit_amount, credit_amount, description, created_at ``` **assets** ``` id, asset_name, asset_category, purchase_date, purchase_cost, accumulated_depreciation, net_book_value, created_at, updated_at ``` **liabilities** ``` id, liability_name, liability_type, original_amount, outstanding_balance, monthly_repayment, created_at, updated_at ``` ### Controller `ReportsController@index` — default to profit and loss tab `ReportsController@profitLoss` — revenue and cost data for P&L `ReportsController@balanceSheet` — assets, liabilities and equity totals `ReportsController@trialBalance` — all account balances `ReportsController@assetsLiabilities` — asset and liability register data `ReportsController@projectReports` — all projects with financial data ### Routes ``` GET /reports GET /reports/profit-loss GET /reports/balance-sheet GET /reports/trial-balance GET /reports/assets-liabilities GET /reports/projects GET /reports/export/pdf ``` --- ## MODULE 14 — ALERTS ### Page Single page. No sub-pages or detail views. ### Stat Cards Three cards: Critical count (1), Warnings count (2), Info count (3) ### Alert Cards Five alert cards stacked vertically. Each card has: - Coloured left border — red for critical, amber for warning, blue for info - Coloured icon on left - Title in bold - Description text - Time since triggered - Action button on right **Alert 1 — Critical** Title: Mzuzu Road — Budget Overrun Description: Exceeded budget by MWK 1.8M. Costs at 86% with 42% completion. Button: Review — navigates to Finance page **Alert 2 — Warning** Title: Low Stock — Portland Cement Description: Only 120 bags remaining. Minimum required is 500 bags. Button: Order Now — navigates to Procurement page **Alert 3 — Warning** Title: Invoice Overdue — Mangochi Resort Description: Invoice INV-0091 of MWK 3.2M is 14 days overdue. Button: Chase — navigates to Invoices page **Alert 4 — Info** Title: Payroll Due in 3 Days Description: Monthly payroll of MWK 8.7M due on 25 April 2026. Button: View — navigates to Payroll page **Alert 5 — Info** Title: MRA VAT Return Due Description: VAT return for March 2026 due by 30 April 2026. Net payable MWK 2.4M. Button: File Now — navigates to Finance page ### Database Tables **alerts** ``` id, alert_type, title, message, severity, is_read, related_module, related_id, triggered_at, created_at ``` ### Controller `AlertController@index` — all alerts with counts by severity `AlertController@markRead` — mark alert as read ### Routes ``` GET /alerts PUT /alerts/{id}/read ``` --- ## AUTHENTICATION ### What Is Built Single user session. User shown in sidebar footer: John Doe, Managing Director. ### What to Build Laravel Fortify for login. Redirect to dashboard on successful login. Redirect to login page if unauthenticated. ### Database Tables **users** ``` id, name, email, password, role, is_active, last_login_at, created_at, updated_at ``` ### Routes ``` GET /login POST /login POST /logout ``` --- ## NAVIGATION ### How It Works Every sidebar link navigates to a separate Laravel route. Each route is handled by its own controller and renders its own Blade view inside the shared master layout. ### Back Button Appears in the top bar when on a detail page — project detail, client detail, invoice detail or quotation detail. Navigates back to the parent list page using `history.back()` or a hardcoded back link. ### Route Map ``` / → redirect to /dashboard /dashboard → DashboardController@index /projects → ProjectController@index /projects/{id} → ProjectController@show /clients → ClientController@index /clients/{id} → ClientController@show /finance → FinanceController@index /invoices → InvoiceController@index /invoices/{id} → InvoiceController@show /quotations → QuotationController@index /quotations/{id} → QuotationController@show /cashflow → CashFlowController@index /payroll → PayrollController@index /inventory → InventoryController@index /procurement → ProcurementController@index /tracking → TrackingController@index /documents → DocumentController@index /reports → ReportsController@index /alerts → AlertController@index ``` --- ## MODALS Every Add or New button opens a modal form. On save the record is stored, the list refreshes and a toast notification confirms success at the bottom right of the screen. ### Modal Summary | Button | Saves To | |--------|---------| | New Project | projects | | Add Client | clients | | Add Transaction | transactions | | Submit Expense | expenses | | New Invoice | invoices + invoice_items | | New Quotation | quotations + quotation_items | | Add Employee | employees | | Add Item | materials | | Issue Materials | stock_movements | | New Purchase Order | purchase_orders | | Add Milestone | milestones | | Daily Update | daily_site_updates | | Upload Document | documents | --- ## TOAST NOTIFICATIONS Every save action triggers a toast notification at the bottom right. In Laravel this is handled by session flash messages rendered in the Blade master layout and shown via JavaScript on page load. --- ## DATABASE — ALL TABLES ``` users projects project_team clients transactions expenses invoices invoice_items quotations quotation_items cash_inflows cash_outflows employees payroll_runs materials stock_movements suppliers purchase_orders milestones daily_site_updates documents chart_of_accounts journal_lines assets liabilities alerts ``` --- ## SECURITY - All routes protected by Laravel `auth` middleware - Unauthenticated users redirected to login page - CSRF token on all forms using Laravel `@csrf` - All input validated using Laravel Form Request classes - Passwords hashed using bcrypt - File uploads validated for type and size - Financial data never exposed in URL parameters --- ## BUILD ORDER Build in this order to avoid dependency issues: 1. Authentication — login, logout, session 2. Master layout — sidebar, topbar, toast, back button 3. Dashboard — static then wired to live data last 4. Projects — list and detail — most other modules link back here 5. Clients — list and detail 6. Finance & Costs — transactions and expenses 7. Invoices — list, detail and line items 8. Quotations — list, detail and line items 9. Cash Flow 10. Payroll & HR 11. Inventory — including issue materials logic 12. Procurement 13. Progress Tracking — milestones and progress bars 14. Documents — upload and download 15. Reports — all 5 tabs 16. Alerts 17. All modals wired to their save endpoints 18. Data validation and error handling on all forms --- *This guide is based exactly on what is built and designed in the Dach CMS prototype. Prepared by Insight Innovations Ltd.*