{"id":25183975,"url":"https://github.com/e2b-dev/dashboard","last_synced_at":"2025-05-07T13:06:01.011Z","repository":{"id":276583946,"uuid":"902356902","full_name":"e2b-dev/dashboard","owner":"e2b-dev","description":"Modern dashboard for managing E2B sandboxes and API keys. Built with Next.js 15, React 19, and Supabase.","archived":false,"fork":false,"pushed_at":"2025-05-07T12:40:15.000Z","size":8039,"stargazers_count":41,"open_issues_count":0,"forks_count":10,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T13:05:50.965Z","etag":null,"topics":["bun","dashboard","mdx","nextjs","partial-prerendering","radix-ui","react","shadcn-ui","storybook","supabase","tailwindcss","typescript","zustand"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/e2b-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-12-12T12:09:36.000Z","updated_at":"2025-05-07T12:40:18.000Z","dependencies_parsed_at":"2025-04-23T22:39:20.510Z","dependency_job_id":null,"html_url":"https://github.com/e2b-dev/dashboard","commit_stats":null,"previous_names":["e2b-dev/dashboard"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e2b-dev%2Fdashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e2b-dev%2Fdashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e2b-dev%2Fdashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e2b-dev%2Fdashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/e2b-dev","download_url":"https://codeload.github.com/e2b-dev/dashboard/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252883206,"owners_count":21819160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bun","dashboard","mdx","nextjs","partial-prerendering","radix-ui","react","shadcn-ui","storybook","supabase","tailwindcss","typescript","zustand"],"created_at":"2025-02-09T19:19:45.785Z","updated_at":"2025-05-07T13:06:01.003Z","avatar_url":"https://github.com/e2b-dev.png","language":"TypeScript","readme":"\u003c!-- \u003cp align=\"center\"\u003e\n  \u003cimg width=\"100\" src=\"/readme-assets/logo-circle.png\" alt=\"e2b logo\"\u003e\n\u003c/p\u003e --\u003e\n![Dashboard Preview Dark](/readme-assets/dashboard-preview-dark.png#gh-dark-mode-only)\n![Dashboard Preview Light](/readme-assets/dashboard-preview-light.png#gh-light-mode-only)\n\n# E2B Dashboard\n\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)\n[![Discord](https://img.shields.io/discord/1092455714431180995?color=7289DA\u0026label=Discord\u0026logo=discord\u0026logoColor=white)](https://discord.com/channels/1092455714431180995)\n[![GitHub Stars](https://img.shields.io/github/stars/e2b-dev/dashboard?style=social)](https://github.com/e2b-dev/dashboard)\n\n## Quick Links\n- 📚 [Documentation](https://e2b.dev/docs)\n- 💬 [Discord Community](https://discord.gg/e2b)\n- 🐛 [Issue Tracker](https://github.com/e2b-dev/dashboard/issues)\n- 🤝 [Contributing Guide](CONTRIBUTING.md)\n\n## Overview\nOur Dashboard is a modern, feature-rich web application built to manage and monitor E2B services. Built with Next.js 15 and React 19, it provides a seamless user experience for managing sandboxes, API keys, and usage analytics.\n\n## Features\n- **Modern Stack**: Built with Next.js 15, React 19, and TypeScript\n- **Real-time Analytics**: Monitor your sandbox usage and performance\n- **Authentication**: Secure authentication powered by Supabase\n- **Documentation**: Integrated MDX documentation support\n- **Type Safety**: Full TypeScript support throughout the codebase\n\n## Getting Started\n\n\u003e **Self-hosting Note**: If you're planning to self-host this dashboard, you'll likely want to self-host our infrastructure first. Please refer to our [infrastructure repository](https://github.com/e2b-dev/infra) for guidance on setting up the E2B platform on your own infrastructure.\n\n### Prerequisites\n- Node.js 18+\n- Git\n- Vercel account\n- Supabase account\n- PostHog account (optional for analytics)\n\n### Local Development Setup\n\n1. Clone the repository\n```bash\ngit clone https://github.com/e2b-dev/dashboard.git\ncd dashboard\n```\n\n2. Install dependencies\n```bash\n# Using Bun (recommended)\nbun install\n\n# Using npm\nnpm install --legacy-peer-deps\n```\n\n3. Environment Variables\n```bash\n# Copy the example env file\ncp .env.example .env.local\n```\n\n4. Set up required services:\n\n#### a. Key-Value Store Setup\nThis project requires a Redis-compatible key-value store. You'll need to:\n\n1. Set up a Redis instance (self-hosted or using a cloud provider)\n2. Configure the following environment variables in your `.env.local` file:\n   ```\n   KV_URL=your_redis_connection_string\n   KV_REST_API_URL=your_redis_rest_api_url\n   KV_REST_API_TOKEN=your_redis_api_write_token\n   KV_REST_API_READ_ONLY_TOKEN=your_redis_api_read_token\n   ```\n\n\u003e **Note**: For production deployments, we use Vercel KV Storage integration, which provides a managed Redis-compatible store and automatically configures these environment variables. You can add this integration through the Vercel dashboard when deploying your project.\n\n#### b. Supabase Setup\n1. Create a new Supabase project\n2. Go to Project Settings \u003e API\n3. Copy the `anon key` \u0026 `service_role key` to populate `.env.local`\n4. Copy the `database url` to populate `.env.local`\n4. Configure authentication:\n   - Go to Authentication \u003e URL Configuration\n   - Set Site URL to the hosting domain \n   - Add `http://localhost:3000/**` to Redirect URLs (for development)\n5. Enable auth providers:\n   - Go to Authentication \u003e Providers\n   - Enable the providers you want to use (GitHub, Google, E-Mail)\n   - Configure each provider with the appropriate credentials\n\n#### c. Database Setup\n1. Apply the database migrations manually:\n   - Navigate to the `/migrations` folder in the project\n   - Execute each SQL migration file in sequential order against your Supabase database\n   - You can run these migrations using the Supabase SQL Editor or a PostgreSQL client\n   - Make sure to apply migrations in the correct order based on their timestamp prefixes\n\n#### d. Supabase Storage Setup\n1. Go to Storage \u003e Buckets\n2. Create a new **public** bucket named `profile-pictures`\n\n\n#### e. Cookie Encryption\nThe dashboard uses encrypted cookies for secure data storage. You'll need to set up a `COOKIE_ENCRYPTION_KEY`:\n\n```bash\n# Generate a secure encryption key\nnode -e \"console.log(require('crypto').randomBytes(32).toString('base64'))\"\n\n# Add the generated key to your .env.local file\nCOOKIE_ENCRYPTION_KEY=your_generated_base64_key\n```\n\nThis key must be:\n- 32 bytes (256 bits) encoded in base64\n- Unique per environment (development/staging/production)\n- Kept secret and never committed to version control\n\n4. Start the development server\n```bash\n# Using Bun (recommended)\nbun run dev\n\n# Using npm\nnpm run dev\n```\n\nThe application will be available at `http://localhost:3000`\n\n## Development\n\n### Available Scripts\n```bash\n# Using Bun (recommended)\nbun run dev         # Start development server\nbun run build      # Create production build\nbun run start      # Start production server\nbun run preview    # Build and preview production\nbun run lint       # Run ESLint\nbun run lint:fix   # Auto-fix ESLint issues\nbun run storybook  # Launch Storybook\nSUPABASE_PROJECT_ID=your-project-id bun run db:types   # Generate DB types\nbun run db:migration # Create migration\n\n# All commands work with npm as well:\nnpm run dev\n# etc...\n```\n\n### Project Structure\n```\nsrc/\n├── app/          # Next.js app router pages\n├── features/     # Feature-specific components\n├── ui/           # Reusable UI components\n├── lib/          # Utility functions and shared logic\n├── styles/       # Global styles and Tailwind config\n└── types/        # TypeScript type definitions\n└── server/       # Server only logic \u0026 actions\n└── __test__/     # Test files and utilities\n```\n\n### Testing\nWe use a comprehensive testing strategy with integration tests and plans for E2E tests. For detailed information about our testing approach, environment setup, and best practices, see the [Testing README](src/__test__/README.md).\n\n### Environment Variables\nSee [`src/lib/env.ts`](./src/lib/env.ts) for all required environment variables and their validation schemas.\n\n## Production Deployment\n\nThis application is optimized for deployment on Vercel:\n\n1. Push your changes to GitHub\n2. Import your repository in Vercel\n3. Deploy!\n\n\u003e **Note**: The application uses Partial Prerendering (PPR) which is currently only supported on Vercel's infrastructure. This can be turned off inside [`next.config.mjs`](./next.config.mjs).\n\n## Contributing\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n## Support\nIf you need help or have questions:\n\n1. Check our [Documentation](https://e2b.dev/docs)\n2. Join our [Discord Community](https://discord.gg/e2b)\n3. Open an [Issue](https://github.com/e2b-dev/dashboard/issues)\n\n## License\nThis project is licensed under the Apache License, Version 2.0 - see the [LICENSE](LICENSE) file for details.\n\nCopyright 2025 FoundryLabs, Inc.","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fe2b-dev%2Fdashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fe2b-dev%2Fdashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fe2b-dev%2Fdashboard/lists"}