To clone and run this application, you'll need Git and Mise installed on your computer.
From your command line:
git clone https://github.com/OpenUp-LabTakizawa/dcrscd dcrs && bun ibun devThe app needs PostgreSQL and S3-compatible storage. Bring them up first with
the local development environment, or start
the web daemon, which does both.
bun test:unitbun test:e2ebun fixbun run buildbun startInstead of connecting to remote services (Neon PostgreSQL, Vercel Blob), you can run a fully local environment using Docker Compose with PostgreSQL and RustFS (S3-compatible storage).
Prerequisites: Docker
mise dev:upThis single command will:
- Start PostgreSQL and RustFS via Docker Compose
- Run database migrations
- Create the S3 bucket in RustFS
The containers run under pitchfork as the db daemon rather than detached, so
mise daemons logs db tails them and mise dev:down stops them. To bring the
dev server up with the stack, start the web daemon instead -- it depends on
db, so this does everything mise dev:up does and then runs bun dev:
mise daemons start webPlaywright runs against that daemon with:
mise test:e2eIt starts web -- and db through its depends -- reusing whatever already
runs, then runs bun test:e2e. Run bun test:e2e directly when the server and
the database are already up; on its own it spawns a dev server that dies with
the test run, and in local mode that server talks to a database nobody started.
No .env is involved. The values live in the [env] table of mise.toml,
and mise exports them into every shell opened inside the repository, so
bun dev and the database commands pick them up on their own.
That relies on mise's shell integration, which is also what puts bun on
PATH; if mise doctor reports it as missing, enable it once:
echo 'eval "$(mise activate bash)"' >> ~/.bashrc && exec bashSee activate for zsh, fish, and
friends, or use mise exec -- <cmd> for a one-off command.
Values resolve in this order:
| Priority | Source | Used by |
|---|---|---|
| 1 | mise.local.toml |
Per-checkout overrides, secrets (gitignored) |
| 2 | [env] in mise.toml |
The local Docker stack |
The entries are plain values, so mise sets them unconditionally: exporting a
variable in your shell does not override them, and a .env left in the
checkout is ignored for every key the table defines. Point a checkout somewhere
else -- a Neon database, a Vercel Blob token -- from mise.local.toml.
Note: the defaults include
S3_ENDPOINT=http://localhost:9000for RustFS. If you use the S3 backend against real AWS instead, setS3_ENDPOINT = ""inmise.local.tomlalongside the otherS3_*values, so the SDK falls back to the AWS endpoint. This does not apply whenBLOB_READ_WRITE_TOKENis set, since Vercel Blob is then used and theS3_*values are ignored.mise dev:upalways targets the local RustFS regardless, since it bootstraps that stack.
mise dev:downmise dev:reset| Service | Host Port | Description |
|---|---|---|
| PostgreSQL | 5432 | Database |
| RustFS S3 API | 9000 | S3-compatible object storage |
| RustFS Console | 9001 | Web management console |
Nothing in mise.toml reaches a deployment — Vercel builds never read it — so
these come from the project's environment variables:
| Variable | Description | Required |
|---|---|---|
DATABASE_URL |
Neon PostgreSQL connection string | ✅ |
BETTER_AUTH_SECRET |
Secret key for Better Auth session encryption | ✅ |
BETTER_AUTH_URL |
Base URL for Better Auth | ✅ |
AUTH_RESEND_KEY |
Resend API key for sending emails | ✅ |
DB_TYPE |
Database driver type: neon (default) or postgres for standard PostgreSQL |
❌ |
BLOB_READ_WRITE_TOKEN |
Vercel Blob read/write token. When set, Vercel Blob is the storage backend; otherwise S3 is used | ❌ |
S3_ACCESS_KEY_ID |
AWS S3 access key ID (required when using the S3 backend) | ❌ |
S3_SECRET_ACCESS_KEY |
AWS S3 secret access key (required when using the S3 backend) | ❌ |
S3_REGION |
S3 region (AWS_REGION is also accepted; required when using the S3 backend) |
❌ |
S3_BUCKET |
S3 bucket name (uses the default value if omitted) | ❌ |
S3_ENDPOINT |
S3-compatible endpoint URL (e.g. http://localhost:9000 for RustFS). When set, path-style access is enabled |
❌ |
API_URL |
Base URL for the API (default: http://localhost:3000) |
❌ |
A local checkout needs none of them: the
local development environment carries its own
values, and per-checkout overrides go in mise.local.toml.
Visual Studio Code is the recommended IDE for working on this project, as it has been configured.
Once opening, you can run Extensions: Show Recommended Extensions to install the recommended extensions for good development is automatically configured.
A dev container is a running container with a well-defined tool/runtime stack and its prerequisites.
You can try out dev containers with GitHub Codespaces or Visual Studio Code Dev Containers.
GitHub Codespaces
GitHub Codespaces is a cloud-based development environment that allows you to work on this project directly in your browser.
You can click the badge above or here to get started.
Follow these steps to open this project in a Codespace:
- Click the Code drop-down menu.
- Click on the Codespaces tab.
- Click Create codespace on main.
For more info, check out the GitHub documentation.
VSCode Dev Containers
Follow these steps to open this project in a container using the VSCode Dev Containers extension:
-
If this is your first time using a dev container, please ensure your system meets the pre-reqs (i.e. have Docker installed) in the getting started steps.
-
To use this repository, open a locally cloned copy of the code:
- Clone this repository to your local filesystem.
- Press F1 and select the Dev Containers: Open Folder in Container... command.
- Select the cloned copy of this folder, wait for the container to start, and try things out!
Want to report a bug, contribute some code, or improve the documentation? Excellent!
Read up on our guidelines for contributing and Code of Conduct.
Then check out one of our issues labeled as 😵💫help wanted or good first issue.
This software uses the following open source packages:
- AWS Lambda Web Adapter
- Better Auth
- Biome
- Bun
- daisyUI
- Drizzle
- HAPPY DOM
- Mise
- Next.js
- Node.js
- Playwright
- React
- RustFS
- TanStack Form
- StackBlitz Codeflow
- Tailwind CSS
- TypeScript
The Apache License Version 2.0 (2026) - OpenUp-LabTakizawa. Please have a look at the LICENSE for more details.