Skip to content

Repository files navigation

Projections

Projections is a financial-modeling workspace for building, organizing, and explaining connected business forecasts. It takes the flexibility of an Excel model and gives it a clearer structure, an activity trail, and a place for supporting materials.

The idea

Financial projections rarely live in one spreadsheet tab. A sales forecast may drive revenue in an income statement, which then feeds cash flow and balance-sheet projections. This app treats each piece as its own project. A project can stand alone while it is being developed, then be grouped and connected with related projects in a collection.

For example, an annual-plan collection might include:

  • A sales forecast by product or customer segment
  • An income statement projection using the sales forecast
  • A cash-flow projection using the income statement
  • A balance-sheet projection that reflects the cash-flow model

The goal is to preserve the logic and context behind a forecast—not just the final numbers—so it can be reviewed or shared with a consultant, lender, investor, or teammate. I am not sure if this has legs as a commercial product, given that the workarounds (spreadsheets and folders) are easy, available, and powerful in their own way. But, I wanted to give organizing and connecting this information a shot.

Core concepts

Collections

A collection is an optional home for a connected set of projections, such as a budget, annual operating plan, acquisition model, or financing case. It makes relationships between projects visible in one workspace without preventing someone from starting a project first.

Projects

A project represents one focused use case: a sales forecast, income statement, cash-flow forecast, balance sheet, or a custom model. Projects will ultimately be able to indicate which other projects they use as inputs and which models they feed.

Projection editor MVP

The first projection editor is intentionally a focused financial grid rather than a general-purpose spreadsheet.

  • When creating a projection, the user selects a start date and a projection length, such as three or five years.
  • The projection uses the calendar year. The user can choose monthly detail for the first one or two calendar years; the following columns are full calendar years. Models can extend to a maximum 10-year horizon.
  • Date columns are generated by the application rather than freely named.
  • Users can add, order, and group named rows into sections.
  • A cell can contain a number or a limited financial formula. Formulas are edited in a formula bar above the grid and calculate immediately in the browser.
  • Initial formula support will be deliberately small: arithmetic, cell references, assumption references, totals, and a payment function. It will not attempt full Excel compatibility.
  • Summary rows are calculated rows that total other rows for the same period.
  • New rows are added at the end of their current section. Editable rows expose Rename, Insert row below, and Delete row actions on hover.

Assumptions and variables

Assumptions explain the drivers behind a projection: growth rates, headcount, prices, payment terms, or timing. They can be numbers, percentages, currency values, or text notes.

An assumption can explain the project generally, apply to one row across a selected date range, or be referenced directly by a formula. A selected cell range can use Apply to selection to record that context. Typing @ in the formula bar will let the user reference an assumption in the actual calculation. Changing a referenced assumption recalculates affected cells immediately and indicates that they use an assumption.

For this MVP, an assumption is removed from a model separately from deleting it entirely, so an action never silently destroys a reusable driver.

In a future iteration, reusable variables will let the same value be referenced by several projects—for example, a per-unit expense price used across a sales forecast and an expense projection.

Versions and activity

Every meaningful change should be traceable. The workspace records activity such as project creation, updates, new assumptions, and saved versions. Named versions make it possible to preserve a review-ready checkpoint before trying a new scenario.

Files

Projects will support supporting files such as source financial statements, Excel workbooks, PDFs, Word documents, and images. The intended result is a shareable, well-documented project rather than an isolated spreadsheet.

Current build

The current application includes:

  • Email/password authentication through Supabase
  • A public landing page and authenticated workspace shell
  • Collections and projection projects
  • Project types for sales forecasts, income statements, balance sheets, cash flow, and general models
  • Assumptions and named version checkpoints in the application schema
  • Project activity logging
  • Profile names stored in Supabase Auth user metadata
  • Light, dark, and system appearance settings

Templates, data sources, project-to-project formula links, reusable variables, file uploads, and workspace-wide activity views are planned next.

Technology

Local setup

  1. Install dependencies:

    npm install
  2. Create a Supabase project and add a .env.local file:

    NEXT_PUBLIC_SUPABASE_URL=your-project-url
    NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your-publishable-key
  3. In Supabase Dashboard, open SQL Editor and run the migrations in order:

    • supabase/migrations/20260806220000_phase1_collections_projects.sql
    • supabase/migrations/20260807210000_phase2_assumptions_versions.sql
    • supabase/migrations/20260810110000_make_projects_independent.sql

    These create the application tables, indexes, activity log, and row-level security policies. Supabase Auth users are managed separately in auth.users when someone signs up.

  4. In Supabase Dashboard, add your local URL (http://localhost:3000) to the Auth redirect URL allow-list. Add your Vercel production URL there when you deploy.

  5. Start the app:

    npm run dev

Open http://localhost:3000, create an account, confirm the email, then create a project. You can leave it unfiled or add it to a collection.

Useful commands

npm run dev    # Start the local development server
npm run lint   # Check code quality
npm run build  # Create a production build

Project status

This is an actively evolving portfolio project. The focus is a thoughtfully designed, understandable foundation that can grow from individual forecasts into connected, auditable financial models.

Releases

Packages

Contributors

Languages