Skip to content

Repository files navigation

EVY

If smartphones and the internet were built by the people for the people. Create services on the EVY platform and get paid every time your contribution is used.

The EVY app is privacy-focused and local-first: the iOS client keeps a persistent on-device store, reads from it offline, and writes optimistically before syncing. Today all clients sync through a central JSON-RPC WebSocket gateway backed by Postgres — peer-to-peer transport and enforced per-user data scoping are roadmap goals, not the current architecture.

Architecture

flowchart LR
    ios[iOS app]
    web[Web builder]

    api[api JSON-RPC WebSocket gateway]
    marketplace[marketplace service JSON-RPC WebSocket]
    evyDb[(Postgres evy DB)]
    mpDb[(Postgres marketplace DB)]

    ios -- WebSocket --> api
    web -- WebSocket --> api
    api -- evy core resource handlers / Drizzle --> evyDb
    api -- service marketplace JSON-RPC --> marketplace
    marketplace -- Drizzle --> mpDb
Loading

Documentation

Setup

  1. Install Bun
  2. Install Docker
  3. Copy .env.example to .env

Running Services

Development

All-in-one (bun dev)

Run Postgres (in Docker), the marketplace service, the main API, and the web app:

bun dev

This will watch for file changes in any project and restart them as well as re-generate types

Postgres + manual running of each app

Start Postgres (docker compose up --build postgres), then in separate terminals from the repo root:

bun install
bun run types:generate
bun run db:seed

cd services/marketplace && bun run dev
cd api && bun run dev
cd web && bun run dev

Production (with Docker Compose)

Uses pre-built images from GitHub Container Registry (requires authentication). Also copy .env.prod.example and merge it with .env (Traefik/domain variables — see that file's header for how it combines with .env.example):

docker compose -f docker-compose.prod.yml up

End to end testing

./run-e2e.sh runs API, web, and iOS end-to-end tests with Docker Compose.

You can optionally skip the iOS tests (which are heavy and slow) by running ./run-e2e.sh --skip-ios

The --ci flag is intended for CI only and is not meant for regular local runs. It runs API, marketplace, and web directly with Bun and expects PostgreSQL to already be running on the host. It exists because the macOS CI runner cannot run a container runtime (no nested virtualization), so PostgreSQL is provided on the host instead. For local development, use ./run-e2e.sh (or ./run-e2e.sh --skip-ios) rather than --ci.

CI

  • API lint, build, and tests, and web lint run on Linux.
  • Web tests run on Linux and install Playwright before running.
  • E2E tests run on macOS with ./run-e2e.sh --ci. PostgreSQL is started on the host (the macOS runner cannot run Docker), then API, marketplace, web, and iOS Simulator tests run with Bun. iOS tests target iPhone 17 / iOS 26.5.

About

If smartphones and the internet were build by the people for the people. Create services on the EVY platform and get paid everytime your contribution is used. The EVY app is privacy-focused, local-first and peer-to-peer.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages