{"id":47607987,"url":"https://github.com/smgdkngt/dobase","last_synced_at":"2026-04-24T07:05:14.564Z","repository":{"id":344147071,"uuid":"1180626210","full_name":"smgdkngt/dobase","owner":"smgdkngt","description":"Open-source, self-hosted workspace with installable tools. Mail, boards, docs, chat, todos, files, calendar, and video rooms. Deploy with ONCE, Kamal, or Docker.","archived":false,"fork":false,"pushed_at":"2026-04-13T12:17:50.000Z","size":8085,"stargazers_count":163,"open_issues_count":4,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-13T13:30:05.650Z","etag":null,"topics":["collaboration","docker","hotwire","once-compatible","open-source","pwa","rails","self-hosted","sqlite","workspace"],"latest_commit_sha":null,"homepage":"https://dobase.co","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/smgdkngt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-13T08:34:02.000Z","updated_at":"2026-04-13T12:17:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/smgdkngt/dobase","commit_stats":null,"previous_names":["smgdkngt/dobase"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/smgdkngt/dobase","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smgdkngt%2Fdobase","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smgdkngt%2Fdobase/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smgdkngt%2Fdobase/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smgdkngt%2Fdobase/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/smgdkngt","download_url":"https://codeload.github.com/smgdkngt/dobase/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smgdkngt%2Fdobase/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32212813,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T03:15:14.334Z","status":"ssl_error","status_checked_at":"2026-04-24T03:15:11.608Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collaboration","docker","hotwire","once-compatible","open-source","pwa","rails","self-hosted","sqlite","workspace"],"created_at":"2026-04-01T19:39:09.449Z","updated_at":"2026-04-24T07:05:14.525Z","avatar_url":"https://github.com/smgdkngt.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dobase\n\nAn open-source, self-hosted workspace with installable tools. Add a mail client, kanban boards, documents, chat, file storage, calendars, to-do lists, or video rooms — each shared with collaborators you choose.\n\nBuilt with Ruby on Rails 8.1, Hotwire, and Tailwind CSS.\n\n![Dobase](site/demo.gif)\n\n## Tools\n\n| Tool | Description |\n|------|-------------|\n| **Mail** | IMAP/SMTP email client with rich text compose, drafts, contacts, and conversations |\n| **Board** | Kanban boards with columns, cards, comments, and attachments |\n| **Docs** | Rich text documents with collaborative editing |\n| **Chat** | Real-time messaging with typing indicators, replies, and file sharing |\n| **Todos** | Task lists with due dates, assignments, comments, and attachments |\n| **Files** | File storage with folders, sharing via public links, and previews |\n| **Calendar** | CalDAV-compatible calendar with recurring events and local mode |\n| **Room** | Video conferencing powered by LiveKit |\n\n## Self-hosting\n\nDobase runs as a single Docker container. Everything — web server, background jobs, database — is included.\n\n### Install with ONCE\n\nThe easiest way to self-host Dobase is with [ONCE](https://once.com) by 37signals. ONCE handles installation, updates, backups, and SSL — all from a simple terminal dashboard.\n\nPoint ONCE at:\n\n```\nghcr.io/smgdkngt/dobase:latest\n```\n\nThat's it. ONCE takes care of the rest — including SSL, persistent storage, and automatic backups. Works on any Linux server, cloud VPS, or even a Raspberry Pi.\n\nAll tools work out of the box except the Room (video) tool, which requires an external [LiveKit](https://livekit.io) server. ONCE runs a single container per app, so LiveKit needs to run separately — either via [LiveKit Cloud](https://livekit.io/cloud) or as a standalone Docker container. See [Video conferencing](#video-conferencing-livekit) for setup.\n\n### Deploy with Kamal\n\nFor the complete experience — SSL, zero-downtime deploys, LiveKit as an accessory — use [Kamal](https://kamal-deploy.org). All you need is a VPS with Ubuntu.\n\n```bash\ngit clone https://github.com/smgdkngt/dobase.git\ncd dobase\n```\n\nEdit `config/deploy.yml` with your server IP and domain, then add secrets to `.kamal/secrets`:\n\n```bash\n# .kamal/secrets\nSECRET_KEY_BASE=\u003cgenerate with: bin/rails secret\u003e\nSMTP_USERNAME=your-smtp-user\nSMTP_PASSWORD=your-smtp-password\n```\n\n```bash\nkamal setup    # First deploy — provisions server, builds image, starts app\nkamal deploy   # Subsequent deploys\n```\n\nKamal handles SSL certificates (Let's Encrypt), asset bridging, and rolling restarts automatically. LiveKit can run as a Kamal accessory — uncomment the `livekit` section in `config/deploy.yml`.\n\n### Docker\n\n```bash\ndocker run -d \\\n  -p 80:80 \\\n  -v dobase_storage:/rails/storage \\\n  -e SECRET_KEY_BASE=$(openssl rand -hex 64) \\\n  -e DISABLE_SSL=true \\\n  ghcr.io/smgdkngt/dobase:latest\n```\n\nVisit `http://localhost` and sign up. Remove `DISABLE_SSL=true` when running behind a TLS proxy or with a domain.\n\n### Docker Compose\n\nFor a persistent setup with all options, clone the repo and use the included `docker-compose.yml`:\n\n```bash\ngit clone https://github.com/smgdkngt/dobase.git\ncd dobase\nSECRET_KEY_BASE=$(openssl rand -hex 64) docker compose up -d\n```\n\nOr create your own `docker-compose.yml`:\n\n```yaml\nservices:\n  web:\n    image: ghcr.io/smgdkngt/dobase:latest\n    ports:\n      - \"80:80\"\n    environment:\n      - SECRET_KEY_BASE=\u003cyour-secret\u003e\n      - APP_HOST=your-domain.com\n    volumes:\n      - storage:/rails/storage\n    restart: unless-stopped\n\nvolumes:\n  storage:\n```\n\n### Configuration\n\n| Variable | Default | Purpose |\n|----------|---------|---------|\n| `SECRET_KEY_BASE` | — | **Required.** Generate with `openssl rand -hex 64` |\n| `APP_NAME` | `Dobase` | App name in UI, emails, page titles |\n| `APP_HOST` | `localhost:3000` | Host for mailer URLs |\n| `APP_LOGO_PATH` | `/icon.svg` | Logo path (sidebar, auth pages) |\n| `APP_FROM_EMAIL` | `notifications@dobase.co` | Sender address for emails |\n| `DISABLE_SSL` | — | Set to `true` for non-TLS deployments (ONCE sets this automatically on localhost) |\n| `OPEN_REGISTRATION` | — | Set to `true` to allow public signup (default: invite-only) |\n\n#### Email (SMTP)\n\nEmail sending requires SMTP configuration. Without it, all other features work fine — invitation and notification emails just won't be sent.\n\n| Variable | Default | Purpose |\n|----------|---------|---------|\n| `SMTP_ADDRESS` | — | SMTP server hostname |\n| `SMTP_PORT` | `587` | SMTP port |\n| `SMTP_USERNAME` | — | SMTP username |\n| `SMTP_PASSWORD` | — | SMTP password |\n\n#### Video conferencing (LiveKit)\n\nThe Room tool requires a [LiveKit](https://livekit.io) server. All other tools work without it.\n\nLiveKit runs as a separate container — browsers connect to it directly via WebSocket, so it needs its own public URL.\n\n| Method | How to run LiveKit |\n|--------|--------------------|\n| **Docker Compose** | Uncomment the `livekit` service in `docker-compose.yml` |\n| **Docker** | Run `docker run -d -p 7880:7880 -p 7881:7881 -e LIVEKIT_KEYS=key:secret livekit/livekit-server` |\n| **Kamal** | Uncomment the `livekit` accessory in `config/deploy.yml` |\n| **ONCE** | Run LiveKit separately, or use [LiveKit Cloud](https://livekit.io/cloud) |\n\n| Variable | Default | Purpose |\n|----------|---------|---------|\n| `LIVEKIT_URL` | — | **Public** WebSocket URL browsers connect to (e.g. `wss://room.your-domain.com`) |\n| `LIVEKIT_API_KEY` | — | LiveKit API key |\n| `LIVEKIT_API_SECRET` | — | LiveKit API secret |\n\nExample with Docker Compose (uncomment in `docker-compose.yml`):\n\n```yaml\nlivekit:\n  image: livekit/livekit-server:latest\n  ports:\n    - \"7880:7880\"\n    - \"7881:7881\"\n  environment:\n    - LIVEKIT_KEYS=your-api-key:your-api-secret\n  restart: unless-stopped\n```\n\nThen add to the web service environment:\n\n```yaml\n- LIVEKIT_URL=wss://room.your-domain.com\n- LIVEKIT_API_KEY=your-api-key\n- LIVEKIT_API_SECRET=your-api-secret\n```\n\n### Storage \u0026 backups\n\nAll data lives in `/rails/storage` (SQLite database + uploaded files). Back up this volume regularly.\n\n## Development\n\n### Requirements\n\n- Ruby 3.4+\n- SQLite 3\n- libvips (for image processing)\n\n### Setup\n\n```bash\ngit clone https://github.com/smgdkngt/dobase.git\ncd dobase\nbin/setup\n```\n\nOr manually:\n\n```bash\nbundle install\nbin/rails db:prepare\nbin/dev\n```\n\nThe app runs at `http://localhost:3000`.\n\n### Demo data\n\nSeed the database with a fictional company (\"Moonshot Snacks\") to explore all tools:\n\n```bash\nSEED_DEMO=1 bin/rails db:seed\n```\n\nLog in as `sophie@moonshot-snacks.com` / `password123`.\n\n### Commands\n\n```bash\nbin/dev                    # Start dev server (Rails + Tailwind watcher)\nbin/rails test             # Run tests\nbin/rails test:system      # Run system tests\nbin/rubocop                # Lint Ruby\nbin/brakeman --quiet       # Security analysis\n```\n\n## License\n\n[MIT License](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmgdkngt%2Fdobase","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmgdkngt%2Fdobase","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmgdkngt%2Fdobase/lists"}