Landing de Odin
- TypeScript 59.6%
- HTML 20%
- CSS 19.6%
- Dockerfile 0.8%
|
All checks were successful
Deploy odin.do / deploy (push) Successful in 4s
Ya cumplio: la causa era ProtectSystem=strict en forgejo-runner, que dejaba /var/www en solo lectura para el script de deploy pese a correr con sudo. Queda documentado en un comentario del workflow. |
||
|---|---|---|
| .forgejo/workflows | ||
| site | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| build.ts | ||
| Dockerfile | ||
| package.json | ||
| README.md | ||
| server.ts | ||
| tsconfig.json | ||
odin.do
The odin.do company website featuring interactive 3D visualizations built with Three.js and GSAP.
Prerequisites
Setup
bun install
cp .env.example .env
Running
bun run build # bundle frontend
bun run start # serve on :7002
bun run dev # build + serve with --watch
Open http://localhost:7002.
Configuration
Epsilon
In production, odin.do fetches its configuration from Epsilon, the centralized config manager. Only two env vars are needed at deploy time:
| Variable | Description |
|---|---|
EPSILON_URL |
Epsilon server URL (e.g. http://tenma:8085) |
EPSILON_API_KEY |
Service-specific API key (Bearer token) |
At startup, the service calls GET /api/v1/config with an Authorization: Bearer <key> header. Epsilon returns a JSON response containing:
config— service-specific key/value pairs (same names as env vars)global— shared branding/settings across all services
If Epsilon is unreachable or not configured, the service falls back to local env vars silently.
For local development, leave EPSILON_URL/EPSILON_API_KEY empty — config will be read from local env vars only.
Environment Variables
| Variable | Default | Description |
|---|---|---|
PORT |
7002 |
Server port |
EPSILON_URL |
- | Epsilon config server URL |
EPSILON_API_KEY |
- | Epsilon API key for this service |
Deployment
Deployed via Gitea Actions. On push to main:
- Builds the Docker image (single-stage Bun)
- Pushes to
git.odin.do/odin-software/odin-do - Watchtower picks up the new image and restarts the container
Production runs via docker-compose.yml on the proxy network.