Where everything started

Source available. Not open source.

Every line of Wealth Compass is public — the Apple apps and the web app that came before them. The licence is PolyForm Noncommercial 1.0.0. It lets you read, build, change and redistribute the software, and it stops at one line: you may not use it for a commercial purpose. That restriction is why this page does not call the project open source.

The repository →Read the licence →

PolyForm Noncommercial 1.0.0

Source-available. The Open Source Definition requires a licence not to restrict the field of endeavour; this one restricts it to noncommercial use, so it is not OSI-approved and the term open source does not apply to it.

The licence puts it in one sentence: any noncommercial purpose is a permitted purpose. Everything below is a summary. The file in the repository root is what actually binds.

What you can and cannot do with it

You can

For any noncommercial purpose.

  • Read every line of both implementations, including the parts that handle your money.
  • Build the Apple apps yourself in Xcode and run them on your own devices.
  • Run the web app on your own machine or your own server, for your own use.
  • Change it and build new work on top of it.
  • Redistribute copies, as long as whoever receives them also receives these terms.
  • Use it inside a charity, school, public research body, health or safety body, or government institution — the licence names those as permitted regardless of how they are funded.

You cannot

These are conditions of the licence, not preferences.

  • Use it for a commercial purpose — not the app, not a fork, not a component lifted out of it.
  • Sell it, run it as a paid service, or bundle it into something you sell.
  • Sublicense it or hand your rights to anyone else.
  • Rely on a warranty. The software comes as is, and the author is not liable for what it does.

The dividing line is anticipated commercial application, not money changing hands today. A hobby project, private study, or a fork you run for yourself is inside it. A prototype for something you intend to sell is outside it, on the first day of the prototype.

Nothing in the licence stops the copyright holder from granting different terms to someone who asks. If you want to use this commercially, ask. This page is a plain-language summary written by the author, not legal advice.


The repository

Two implementations, one product

One repository holds both. Not one line of code crosses between them — Swift on one side, TypeScript on the other. Both can write a JSON backup of your data; only the Apple apps can read one back in. Treat them as two implementations of one product, not two halves of it.

Repository layout

wealth-compass/
├── apple/                        the native iPhone and Mac apps — SwiftUI, one Xcode project
│   └── WealthCompass/
│       ├── Sources/Shared/       domain code both platforms use
│       ├── Sources/iOS/          the iPhone app
│       ├── Sources/macOS/        the Mac app, built against the macOS SDK
│       ├── Resources/            asset catalogues and String Catalogues
│       └── WealthCompass.xcodeproj
├── web-app/                      the React + Supabase web app — and this page
│   ├── src/                      application source
│   ├── public/                   static assets and the PWA manifest
│   └── package.json              build, lint and deploy scripts
└── LICENSE                       PolyForm Noncommercial 1.0.0

apple/ is the current product: the iPhone and Mac apps, one Xcode project, two targets, local-first storage in the app sandbox. Open apple/WealthCompass/WealthCompass.xcodeproj and pick the target.

web-app/ is the React app — and also this marketing site, which is built from the same bundle. The web app itself lives under the /sw route and is loaded lazily, so none of Supabase reaches the page you are reading now.


Self-hosting the web app

Run your own copy of it

Five steps on any machine with Node and Git, plus a database schema you create by hand — there is no migration file to run. Read the caveats underneath first: this is the older implementation, and it is not local-first.

  1. 01

    Prerequisites

    Node.js 18 or newer, Git, and a free Supabase account. A Finnhub API key is optional and only powers stock and ETF prices; without one the rest of the app still works.

  2. 02

    Clone and install

    Everything below runs from web-app/, not the repository root.

    git clone https://github.com/simo-hue/wealth-compass.git
    cd wealth-compass/web-app
    npm install
  3. 03

    Create a Supabase project

    Create a project, enable email-and-password authentication, and create the six tables the app reads: assets, liabilities, liquidity_accounts, portfolio_snapshots, transactions and profiles. There is no migration file in the repository, so this part is manual. Sign-in is email and password only — there is no magic-link or one-time-code flow to configure.

  4. 04

    Write the .env

    A .env file in web-app/, next to package.json. The URL and anon key are in Supabase under Project Settings → API. The repository ships an env_example.txt with the same names.

    web-app/.env

    VITE_SUPABASE_URL=https://your-project.supabase.co
    VITE_SUPABASE_ANON_KEY=your_anon_key
    
    # Optional
    VITE_FINNHUB_API_KEY=stock_and_etf_prices
    VITE_ALLOWED_EMAIL=only_this_address_may_sign_in

    The anon key is a public key and ends up in the built bundle by design. What protects your rows is Supabase Row Level Security, which you configure on the project — setting VITE_ALLOWED_EMAIL is a convenience in the client, not a security boundary.

  5. 05

    Run it

    npm run dev

    Vite is configured for port 8080, and the router is mounted at the /wealth-compass sub-path because that is where GitHub Pages serves it. The app is therefore at http://localhost:8080/wealth-compass/sw. To serve it from the root of your own domain, change base in vite.config.ts and BASENAME in src/App.tsx together — they have to agree. npm run build puts a static bundle in dist/.

Before you invest an evening in it

The web app came first and the Apple apps replaced it. New work happens in apple/; the last change to the web app's application code was moving it into its own directory. Check the commit history before you assume otherwise — that is the whole point of the source being public.

It is also not local-first, which is the one claim this site makes loudest about the Apple apps. The web app keeps your records in a Postgres database at Supabase. That database is yours, on your own account, and none of it reaches me — but it does leave your machine, and you are the one responsible for its access rules and its backups.

Deployment is manual: npm run deploy builds and pushes to a gh-pages branch. There is no CI workflow, no hosted instance you can sign up for, and no support commitment attached to a copy you run yourself.

Browse the source →LICENSE →Report a bug →Questions about the app →