A modern, dark-themed dashboard for managing software development projects, clients, deployments, and integrations with tools like Linear, Slack, Notion, and Google Drive.
- User Authentication: Google OAuth integration with role-based access control (Admin, Employee, Client)
- Project Management: Track projects, clients, deployments, and health checks
- Integrations: Connect with Linear (issues), Slack (notifications), Notion (knowledge base), Google Drive (documents) and emit telemetry for each integration so alerts can be configured
- Real-time Dashboard: Live updates for project status, workload, and metrics
- Dark Theme: Modern, responsive UI with dark mode
- Contracts & Docs: Repository-managed workspace templates, client portal downloads, Drive ACL automation, and telemetry (see
docs/contracts-and-docs.md)
- Elixir 1.18+
- Phoenix 1.8+
- PostgreSQL
- Node.js 20+
-
Clone and setup:
git clone https://github.com/slickage/dashboard-ssd.git cd dashboard-ssd mix setup -
Configure environment:
cp .env.example .env # Edit .env with your API keys and secrets -
Run the application:
mix phx.server
-
Visit
localhost:4000
- Workspace templates are defined in
priv/workspace_templates/**and wired through the blueprint config inconfig/*.exs. Seedocs/contracts-and-docs.mdfor the full playbook. - Drive/Notion artifacts are bootstrapped automatically during project/client creation and can be regenerated from Projects → Contracts with per-section toggles.
- Drive ACL automation runs whenever client assignments change and emits telemetry events
(
[:dashboard_ssd, :drive_acl, :sync],[:dashboard_ssd, :documents, :download],[:dashboard_ssd, :documents, :visibility_toggle]) so alerting rules can enforce SC-001–SC-003.
- Run tests:
mix test - Check code quality:
mix check(format + lint + dialyzer + test + docs) - Live reload: Assets are compiled automatically with esbuild
Install required CLI tools:
brew install gitleaksThe secret scan script falls back to Docker if the binary is unavailable.
Required environment variables in .env:
GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET: Google OAuthLINEAR_TOKEN: Linear API accessSLACK_API_KEY: Slack API accessSLACK_CHANNEL: Slack channel for notificationsNOTION_TOKEN: Notion API accessENCRYPTION_KEY: Base64-encoded encryption key for sensitive dataSLICKAGE_ALLOWED_DOMAINS: Comma-separated list of Google Workspace domains that should be treated as internal Slickage users (e.g.,slickage.com,subsidiary.com)
Drive service account (for Contracts → Regenerate / workspace bootstrap):
DRIVE_ROOT_FOLDER_ID: Drive folder ID shared with the service account (Editor). The app createsClients/<Client>/<Project>under this root.DRIVE_SERVICE_ACCOUNT_JSON: Absolute path to the service account JSON key (e.g.,/Users/kkid/secrets/slickage-dashboard-472000-e85feaabee6c.json). The app mints a Drive access token at runtime from this file; you do NOT needGOOGLE_DRIVE_TOKEN.
Example (local):
export DRIVE_ROOT_FOLDER_ID="<your-root-folder-id>"
export DRIVE_SERVICE_ACCOUNT_JSON="/absolute/path/to/drive-service-account.json"
mix phx.server- Run all tests:
mix test - Run with coverage:
mix coveralls - Run specific test:
mix test path/to/test.exs
-
Build the image:
docker build -t dashboard-ssd . -
Run the container:
docker run -p 4000:4000 -e DATABASE_URL=... -e SECRET_KEY_BASE=... dashboard-ssd
-
Environment variables (see config/runtime.exs for full list):
DATABASE_URL: PostgreSQL connection stringSECRET_KEY_BASE: Phoenix secret keyPHX_HOST: Domain nameGOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET: OAuth- Integration tokens:
LINEAR_TOKEN,SLACK_API_KEY,NOTION_TOKEN SLACK_CHANNEL: Slack channel for notificationsENCRYPTION_KEY: Encryption key for sensitive data
The repository includes GitHub Actions for automated testing and Docker image publishing to GHCR on main branch pushes.
For full deployment guides, see Phoenix documentation: https://hexdocs.pm/phoenix/deployment.html
- Backend: Elixir/Phoenix with PostgreSQL
- Frontend: LiveView with Tailwind CSS
- Authentication: Google OAuth 2.0
- Integrations: REST APIs for external services
- Real-time: Phoenix Channels for live updates
- Follow the code style:
mix format,mix credo --strict - Write tests for new features
- Ensure
mix checkpasses - Update documentation as needed
MIT License - see LICENSE file.
- Configure
LINEAR_TOKENin environment. - To re-run Linear sync on demand, use the Projects page -> Sync button.
- Configure
NOTION_API_TOKENandNOTION_DATABASE_IDin environment for the knowledge base. - To re-run Notion sync on demand, use the KB page -> Sync button.
- Enable Google Drive API and Google Docs API in your GCP project.
- Create a service account (IAM & Admin → Service Accounts) and generate a JSON key; point
DRIVE_SERVICE_ACCOUNT_JSONto this file. - Add the service account as a member of the target Shared Drive with at least Content Manager access.
- Set
DRIVE_ROOT_FOLDER_IDto the Shared Drive ID (from the Drive URL:https://drive.google.com/drive/folders/<ID>). - Start the app with these env vars exported; Regenerate/Sync in Contracts will create/update Drive docs under that Shared Drive.