Project manager for architects · in development

Starchitect

A project manager for architects and building surveyors. Photos from site file themselves, every job follows the RIBA Plan of Work, and the client always has an up-to-date progress report.

How the dashboard works Try the site app

Starchitect is still being built. The dashboard, client report and app on this page are working models of the design.

hollinswebb.starchitect.app/projects/rowan-house

Rowan House

Rear extension and loft conversion · 14 Rowan Terrace, Bath · Client: Priya and Tom Marsh

Invite to project View client report

    Stage 5

      Latest from site

      38 photos

      Client report

      Live
      Shared with
      Priya and Tom Marsh
      Last opened
      Wed 22 Oct, 19:12
      Last updated
      Thu 23 Oct, 11:40
      Waiting on client
      Kitchen floor finish
      A working model of the dashboard. Pick a stage to see its tasks, and tick tasks in stage 5 to move the client's report on.

      Overview

      Architects and building surveyors are experts in buildings, not software. Small practices tend to run each job from an inbox, a phone's camera roll and a spreadsheet of stages. None of those tools were made for the work, and every workaround asks for technical knowledge the team doesn't have and shouldn't need. That lack of technical know-how kept getting in their way, and it was the main source of frustration in their day-to-day work.

      Starchitect replaces that patchwork with one place for each project: the photos from site, the stages of the RIBA Plan of Work, and a progress report for the client that keeps itself up to date.

      The 20 MB problem

      One architect couldn't send his client the photos from a site visit, because his email provider rejects anything over 20 MB. He didn't know what a megabyte was. With Starchitect he never has to.

      The kind of message that started the project: one site visit's photos, far over an email provider's limit.

      From site to client

      1. Capture On site, the architect takes photos as normal in the Starchitect app. Each one uploads at full size, filed under the right project and stage.
      2. Manage In the office, each project follows the RIBA Plan of Work. Tasks get ticked off and stages move on, with nothing left to memory.
      3. Share At home, the client opens one link to a living progress report that updates itself as the work happens.
      Backend
      Laravel 8 on PHP 8, MySQL, Redis
      Dashboard
      Vue 2, Vuex and Tailwind CSS
      Site app
      Flutter, for Android and iOS
      Tenancy
      A subdomain and a database for each practice
      Workflow
      RIBA Plan of Work 2020, stored as an editable template
      Storage
      S3-compatible object storage, MinIO in development
      Started
      2021
      Status
      In development

      The dashboard

      The dashboard is where the architect runs each project. Every practice works on its own subdomain, such as hollinswebb.starchitect.app. A new project gets a workflow copied from the practice's template, which starts out as the RIBA Plan of Work 2020: eight stages, each with its RIBA tasks. The architect ticks tasks off as they happen, and photos from the site app arrive already filed against the project and stage.

      The working model in the hero opens on a house extension in stage 5, with building work under way. Ticking a task there updates the client's report further down this page.

      The RIBA stages

      The template holds all 52 RIBA tasks. The client never sees RIBA's terms: each stage also has a plain name, and that's what appears in the client's report.

      StageRIBA nameWhat the client seesTasks

      The client report

      Clients get one link in place of an email thread. The report is a living document: it shows the current stage, the architect's latest note, new photos from site and anything the client needs to decide. It changes as the architect works, so there's nothing to put together or send.

      The report is branded for the practice and lives on its subdomain. The client signs in with a read-only role, so they can see everything about their own project and change nothing except their answers to decisions.

      hollinswebb.starchitect.app/report/rowan-house
      HWHollins & Webb Architects Updated Thu 23 Oct, 11:40

      Rowan House

      Progress report for Priya and Tom Marsh · Rear extension and loft conversion

      Where we are

      Building work

      Latest note

      EW

      Ellen Webb, your architect · Thu 23 Oct

      A good week. The steel beam over the new rear opening went in on Tuesday and building control were happy with it. The loft floor joists are all in too.

      The roofers start on the extension on Monday, so expect some noise from 8am.

      Your decision neededby Fri 6 Nov
      Kitchen floor finish

      Choose one so the screed can be ordered in time. Samples of both are in the site office.

      This week on site

      Coming up

      • Extension roof goes on
      • Your choice of kitchen floor finish
      • Building control inspection of the roof structure

      Earlier

      1. Steel beam fitted over the new rear opening and signed off by building control.
      2. Loft floor joists in. Scaffold up at the back of the house.
      3. Builders started on site.Building work began
      4. Building regulations approval received.Construction drawings finished
      5. Planning permission granted.Detailed designs finished

      This report updates by itself as work goes on. Questions? Reply to any update from Ellen, or call the studio.

      A working model of the client's report for the same project. Pick a floor finish to answer the architect, or take a photo with the site app below and watch it arrive here.

      The site app

      The site app, built with Flutter, does one job. The architect picks the project when they arrive on site, and every photo after that uploads at full resolution, tagged with the project, the current RIBA stage and the time. There's no file size to think about anywhere.

      No signal
      Photos wait on the phone and upload when the site has coverage again
      Filing
      Project and stage come from the dashboard, so nothing needs sorting later
      Sign-in
      The practice's own subdomain, with OAuth tokens from Laravel Passport
      Platforms
      Android and iOS from one Dart codebase
      Sync logPress the shutter on the phone
      1. IMG_4093 → Rowan House › Stage 5Added to the dashboard and the client report
      2. IMG_4091 → Rowan House › Stage 5Added to the dashboard and the client report
      3. IMG_4088 → Rowan House › Stage 5Added to the dashboard and the client report
      Rowan HouseStage 5 · Building work
      All photos syncedWi-Fi or 4G
      Photo Note
      A working model of the site app. Press the shutter: the photo uploads and appears in the dashboard and the client report above.

      Under the hood

      Starchitect is a multi-tenant Laravel application. Each practice gets its own subdomain and its own database, so one practice's projects, clients and photos never share tables with another's. The dashboard, the client report and the site app all talk to the same API.

      How Starchitect is put together The dashboard, client report and site app call the Laravel API over HTTPS on the practice's subdomain, using OAuth2 bearer tokens. The API picks the practice from the subdomain and switches to that practice's database. It also uses a central database of practices, domains and workflow templates, and S3-compatible object storage for photos. Dashboard Vue 2, Vuex, Tailwind CSS Client report Read-only view for the client role Site app Flutter, offline upload queue HTTPS to {practice}.starchitect.app OAuth2 bearer tokens Laravel 8 API The subdomain picks the practice, and the database connection switches to it before any controller runs. Single-purpose actions · Roles and permissions · Queued jobs · Mail and notifications · Redis cache and sessions Central database Practices and their domains, and the central workflow templates Practice databases One per practice: users, roles, projects, workflows, stages, tasks Object storage S3, with MinIO in development. Photos sent through CloudFront with signed URLs
      Every request carries the practice in its subdomain, so the API always works inside one practice's database.

      Tenancy

      Tenancy is handled by stancl/tenancy. Registering a practice queues jobs that create its database, its subdomain, its first admin user and an OAuth client for the site app.

      The RIBA plan as data

      The Plan of Work 2020 is stored centrally as a template of stages and tasks. A practice can copy and edit it into templates of its own, such as a shorter one for measured surveys, and each project gets its own workflow that can change without touching the template.

      // database/seeders/RIBA2020Seeder.php
      $template = [
          "title" => "RIBA Plan of Work 2020",
          "stages" => [
              [
                  "title" => "Strategic Definition",
                  "description" => "Determine the best means of achieving the client's requirements.",
                  "tasks" => [
                      ["title" => "Prepare client requirements"],
                      ["title" => "Review project risks"],
                      // …
                  ],
              ],
              // … seven more stages, 52 tasks in all
          ],
      ];

      Roles and permissions

      Permissions use spatie/laravel-permission behind a thin wrapper. On login the dashboard asks the API for the user's permissions and only shows what they can do, so a client can read a report but never edit a stage.

      Small actions, thin controllers

      Business logic lives in invokable action classes such as CreateProject, UpdateStage and InviteUsers. Controllers stay thin and hand over to them, so the same logic can be used from the API, from queued jobs and from tests.

      // app/Actions/UpdateTask.php
      class UpdateTask
      {
          public function __invoke(array $data): Task
          {
              $task = Task::findOrFail($data['id']);
              $task->fill($data)->save();
              return $task;
          }
      }

      Testing and local development

      Each API resource (projects, stages, tasks, roles, permissions, users and workflow templates) has PHPUnit feature tests covering its endpoints, run by GitHub Actions on pushes and pull requests. Locally, Docker Compose runs nginx, PHP, MySQL, Redis, MinIO for S3-compatible storage, and Mailhog to catch invite and verification emails.

      Limitations

      Starchitect is still being built. The foundations are in place, and the parts that architects and clients would use day to day are designed but not finished:

      • The stage dashboard, the client report and the site app on this page are working models of the design, not the finished product.
      • Photos don't upload yet. The pipeline for uploads, thumbnails and signed delivery is still to be built.
      • The plain names for each stage are part of the design and aren't stored in the workflow templates yet.
      • There's no billing, so practices can't subscribe yet.

      What's built

      • Practice sign-up, with a subdomain and a database created for each one.
      • Login, email verification, password reset and invitations to join a practice.
      • Roles and permissions, with an endpoint for the current user's permissions.
      • A REST API for projects, workflows, stages, tasks and workflow templates.
      • The RIBA Plan of Work 2020 as a seeded template.
      • A project list in the Vue dashboard, with each project's progress and paging.
      • A feature test suite that runs in CI.

      Next steps

      • The stage dashboard and task tracking, as in the working model.
      • The client's living progress report, with decisions the client can answer.
      • The Flutter site app, with its offline upload queue.
      • Notifications for clients when the report changes, so they don't need to check it.
      • Subscription billing for practices.

      The practice, people and project in the working models are made up.