# Phonograph

Phonograph is a friendly, collaborative data platform for nerds of all stripes.
It's for teams who wish they used Postgres, but actually use:

- Airtable
- Google Sheets
- Excel
- `inventory_export-2026-02-15_v3-FINAL.csv`

Phonograph is built on top of Postgres, exposing a curated subset of features
and adds a familiar user interface for developers and end users alike.

# Demo

Try the hosted demo at [phono.dev](https://phono.dev)!

# Features and Design

- Leverages Postgres RBAC for robust authorization, including RLS (planned),
  while adding support for invite-by-email and a familiar permissions model for
  collaboration.
- Integrates with effectively any third party software with a Postgres driver.
- Powerful user interface inspired by your favorite text editor features, like
  multi-cursor editing.
- Write filters and generated column specs (planned) as PostgreSQL&mdash;made
  possible by a custom SQL parser with support for advanced syntax like
  `column = ANY(array)`.

![Screenshot of a spreadsheet-like user interface. A sidebar lists "Tables" and "Portals", and a table on the right displays URL, numeric, and single-select data.](./docs/screenshot_collab.png)

![Screenshot of a terminal overlayed above another page listing credentials and associated permissions. The terminal runs `psql` and displays a query running on the data from the previous screenshot.](./docs/screenshot_psql.png)

# An Experiment from Second System Technologies

Phonograph is a proof-of-concept built by Second System Technologies, to solve
real world problems, and its bones are built to scale. It's a work in progress,
which means that some expected features are missing and we have yet to sand out
many rough edges.

# Development Quickstart

The Phonograph repository comes with a [mise-en-place](https://mise.jdx.dev/)
configuration to automatically manage the development environment:

- `mise install` installs language runtimes and tooling.
- `mise run build-css && mise run build-svelte` builds browser assets.
- `mise run docker-services` runs a Postgres container for local development.
- `mise run server` compiles and runs the server with the dev profile.

## Configuration

Refer to [the .env.example file](./.env.example) for configuration options. An
external OAuth2 provider is required to manage authentication.

# The Phonograph Authorization Model

Refer to documentation in [docs/auth.md](./docs/auth.md).
