One hell of a sandbox index.
  • TypeScript 92.7%
  • CSS 7.2%
  • Dockerfile 0.1%
Find a file
2026-08-25 03:34:07 +02:00
migrations feat: add webauthn passkey support 2026-08-25 03:33:41 +02:00
public Build without a design repository checkout 2026-08-24 19:56:42 +02:00
scripts refactor: replace hand-rolled helpers with bun and node builtins 2026-08-25 03:34:07 +02:00
shots Initial commit 2026-08-24 19:45:09 +02:00
src refactor: replace hand-rolled helpers with bun and node builtins 2026-08-25 03:34:07 +02:00
tests refactor: replace hand-rolled helpers with bun and node builtins 2026-08-25 03:34:07 +02:00
.dockerignore Initial commit 2026-08-24 19:45:09 +02:00
.editorconfig Initial commit 2026-08-24 19:45:09 +02:00
.env.example fix: show technology suggestion errors instead of a bare 422 2026-08-25 00:32:01 +02:00
.gitattributes Initial commit 2026-08-24 19:45:09 +02:00
.gitignore test: cover the owner dashboard with signed-in browser tests 2026-08-25 02:02:48 +02:00
app.config.ts Initial commit 2026-08-24 19:45:09 +02:00
bun.lock feat: two-step totp login and hardened recovery codes 2026-08-25 03:33:59 +02:00
docker-compose.yml Initial commit 2026-08-24 19:45:09 +02:00
Dockerfile build: pin bun 1.4 base image 2026-08-25 03:34:07 +02:00
Dockerfile.dockerignore Initial commit 2026-08-24 19:45:09 +02:00
LICENSE Add MIT License 2026-08-24 19:48:04 +02:00
og-sandbox-29.png Initial commit 2026-08-24 19:45:09 +02:00
package.json feat: two-step totp login and hardened recovery codes 2026-08-25 03:33:59 +02:00
playwright.config.ts test: cover the owner dashboard with signed-in browser tests 2026-08-25 02:02:48 +02:00
railway.json Initial commit 2026-08-24 19:45:09 +02:00
README.md fix: show technology suggestion errors instead of a bare 422 2026-08-25 00:32:01 +02:00
shot-chips.png Initial commit 2026-08-24 19:45:09 +02:00
shot-forge.png Initial commit 2026-08-24 19:45:09 +02:00
tsconfig.json Initial commit 2026-08-24 19:45:09 +02:00
vitest.config.ts Initial commit 2026-08-24 19:45:09 +02:00

OpenSBC Index

License: MIT Chat / Support Bun SolidStart

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.