- TypeScript 92.7%
- CSS 7.2%
- Dockerfile 0.1%
| migrations | ||
| public | ||
| scripts | ||
| shots | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .editorconfig | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| app.config.ts | ||
| bun.lock | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Dockerfile.dockerignore | ||
| LICENSE | ||
| og-sandbox-29.png | ||
| package.json | ||
| playwright.config.ts | ||
| railway.json | ||
| README.md | ||
| shot-chips.png | ||
| shot-forge.png | ||
| tsconfig.json | ||
| vitest.config.ts | ||
What is OpenSBC Index?
OpenSBC Index is a community-maintained directory of sandbox creation platforms. It collects the platforms people actually build on, what each one is made of, who runs it, and what the community thinks of it, so you can compare them in one place instead of piecing it together from scattered Discord servers.
Every platform gets a page with ratings and written reviews, the technologies it is built on, its development updates, its open roles, and links to its source repositories. Platform owners can claim their entry, reply to reviews, publish updates and post positions. Everyone else can rate, comment, suggest corrections and vouch for other members.
The whole site is server-rendered and works with JavaScript turned off. Every write is a plain form post, so there is no client-side state to get out of sync.
Features
- 🗂️ Platform pages with ratings, written reviews and owner replies
- 🔧 Technology insights, showing which platforms use what and for which pillar
- 💼 Cross-platform job board that hands off to each platform's own Discord
- 📰 Development updates with comments and reactions, plus an RSS feed
- 🔗 Source links for GitHub, GitLab, Codeberg, Bitbucket and self-hosted Gitea
- 👑 Owner accounts that can claim a platform, reply to reviews and publish
- 🤝 Peer vouching between members
- ⭐ Embeddable review widget you can drop on your own site
- 🖼️ Generated share cards, so a posted link previews as a summary
- 💬 Discord account linking and two-factor authentication
- 📣 Site-wide announcement banner for outages and notices
- 🚫 No ads and no third-party tracking
Running OpenSBC Index
The database bootstrap creates an administrator account on first boot. It uses
ADMIN_USERNAME and ADMIN_PASSWORD if they are set, and falls back to
admin / opensbc-admin if they are not. Set both before you expose the site,
or change the password immediately after the first sign-in.
With Docker
cp .env.example .env
docker compose up -d
The site listens on http://localhost:3100. Migrations run automatically at
start, so there is no separate setup step.
Manually
Requirements: Bun, MySQL 8.4 or newer, and ffmpeg.
bun install --frozen-lockfile
cp .env.example .env
bun run db:prepare
bun run dev
bun run dev serves http://localhost:3100 with hot reload. Use
bun run build && bun run start for a production server.
Configuration
Copy .env.example to .env. The values worth knowing:
| Variable | Purpose |
|---|---|
DATABASE_URL |
Full connection string. Takes precedence over the DB_* values. |
DB_HOST DB_PORT DB_USER DB_PASSWORD DB_NAME |
Individual database settings. |
PUBLIC_URL |
Canonical origin. Password recovery and share cards need it to build absolute links. |
ADMIN_USERNAME ADMIN_PASSWORD |
First administrator, created on first boot. |
HCAPTCHA_SITE_KEY HCAPTCHA_SECRET |
hCaptcha. Protected submissions fail closed without the secret. |
CAPTCHA_DISABLED |
Set to 1 to turn the anti-bot check off for local work and tests. Ignored when NODE_ENV=production. |
MAIL_API_KEY MAIL_FROM |
Outbound email. Without it, recovery mail is logged instead of sent. |
DISCORD_OAUTH_CLIENT_ID DISCORD_OAUTH_CLIENT_SECRET |
Discord account linking. |
EMBED_FRAME_ANCESTORS |
Sites allowed to embed the review widget. |
PORT |
Listen port. Defaults to 3100. |
Development
bun run verify
verify is the gate everything has to pass: type checking, unit and security
tests, the design-system audit, a production build, and the Playwright browser
suite.
| Command | Purpose |
|---|---|
bun run dev |
Development server with hot reload |
bun run build |
Production build |
bun run start |
Run the built server |
bun run db:migrate |
Apply versioned migrations |
bun run db:prepare |
Migrate, sweep expired sessions, bootstrap the administrator |
bun run db:seed-technologies |
Seed the technology vocabulary |
bun run typecheck |
Strict TypeScript checking |
bun run test |
Unit, component and security tests |
bun run test:e2e |
Playwright browser tests |
bun run audit:design |
Check every CSS class and variable against the design system |
bun run verify |
All of the above, in order |
How the code is laid out
| Path | Contents |
|---|---|
src/solid-routes/ |
File-based routes. Thin adapters that load data and render a page. |
src/pages/ |
Page components. Presentation only. |
src/features/ |
Server queries that shape the data a page needs. |
src/data/ |
SQL. One statement per function. |
src/server/ |
Form endpoints, routing table, and the non-HTML endpoints such as share cards, the feed and the embed widget. |
src/components/ |
Shared components. |
migrations/ |
Versioned, checksummed SQL migrations. |
The design system lives in a separate repository and is synced into public/
at build time. Point OPENSBC_DESIGN_ROOT at your checkout if it is not next to
this one.
Contributing
Run bun run verify before opening a pull request. It has to be green.
New CSS classes and variables must exist in the design system, or the audit fails the build.
Author
OpenSBC Index © OpenSBC, released under the MIT License.
Authored and maintained by bluefield.