{"id":31026916,"url":"https://github.com/shyamg090/quizable","last_synced_at":"2026-04-29T20:32:40.296Z","repository":{"id":313329004,"uuid":"1050981191","full_name":"shyamg090/Quizable","owner":"shyamg090","description":"Quizable is a full-stack application built with Node.js, Next.js, and Temporal.io workflow orchestration. It demonstrates core Temporal concepts through a containerized development environment featuring PostgreSQL persistence, a Temporal server with web UI, and a modern React frontend with TailwindCSS styling.","archived":false,"fork":false,"pushed_at":"2025-12-10T14:14:02.000Z","size":232,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-10T22:36:17.642Z","etag":null,"topics":["docker","express","nextjs","nodejs","postgresql","react","tailwindcss","temporal"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shyamg090.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-09-05T08:52:23.000Z","updated_at":"2025-12-10T14:14:06.000Z","dependencies_parsed_at":"2025-09-07T19:15:47.762Z","dependency_job_id":null,"html_url":"https://github.com/shyamg090/Quizable","commit_stats":null,"previous_names":["shyamg090/football-iq","shyamg090/quizable"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shyamg090/Quizable","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shyamg090%2FQuizable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shyamg090%2FQuizable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shyamg090%2FQuizable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shyamg090%2FQuizable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shyamg090","download_url":"https://codeload.github.com/shyamg090/Quizable/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shyamg090%2FQuizable/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32443469,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T20:22:27.477Z","status":"ssl_error","status_checked_at":"2026-04-29T20:22:26.507Z","response_time":110,"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":["docker","express","nextjs","nodejs","postgresql","react","tailwindcss","temporal"],"created_at":"2025-09-13T18:07:24.233Z","updated_at":"2026-04-29T20:32:40.290Z","avatar_url":"https://github.com/shyamg090.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quizable-temporal\n\nA containerized Temporal workflow orchestration setup with PostgreSQL database and web UI for building distributed applications.\n\n## 📋 Overview\n\nThis project provides a complete Temporal development environment using Docker Compose. Temporal is a durable execution platform that makes it easy to build and operate resilient applications at scale.\n\n## 🏗️ Architecture\n\nThe setup consists of three main components:\n\n```\n┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐\n│   PostgreSQL    │    │  Temporal       │    │  Temporal UI    │\n│   Database      │◄───┤  Server         │◄───┤  Web Interface  │\n│   Port: 5433    │    │  Port: 7234     │    │  Port: 8235     │\n└─────────────────┘    └─────────────────┘    └─────────────────┘\n```\n\n### Components\n\n1. **PostgreSQL Database** (`postgres:13`)\n   - Persistent storage for Temporal server state\n   - Container: `temporal-postgres-quiz`\n   - External Port: `5433` → Internal Port: `5432`\n   - Database: `temporal`\n   - Credentials: `temporal/temporal`\n\n2. **Temporal Server** (`temporalio/auto-setup:1.23`)\n   - Core Temporal services (Frontend, History, Matching, Worker)\n   - Container: `temporal-quiz`\n   - API Port: `7234` (Frontend API)\n   - Automatically sets up database schema on first run\n\n3. **Temporal Web UI** (`temporalio/ui:2.21.3`)\n   - Web interface for monitoring workflows and activities\n   - Container: `temporal-ui-quiz`\n   - External Port: `8235` → Internal Port: `8080`\n   - Access URL: http://localhost:8235\n\n## 🚀 Quick Start\n\n### Prerequisites\n- Docker and Docker Compose installed\n- Ports 5433, 7234, and 8235 available on your system\n\n### Starting the Services\n\n```bash\n# Clone or navigate to the project directory\ncd Quiz-temporal\n\n# Start all services in detached mode\ndocker-compose up -d\n\n# Check service status\ndocker-compose ps\n\n# View logs (optional)\ndocker-compose logs -f\n```\n\n### Accessing the Services\n\n- **Temporal Web UI**: http://localhost:8235\n- **Temporal Server API**: `localhost:7234`\n- **PostgreSQL Database**: `localhost:5433`\n\n### Stopping the Services\n\n```bash\n# Stop all services\ndocker-compose down\n\n# Stop and remove volumes (deletes all data)\ndocker-compose down -v\n```\n\n## 📁 Project Structure\n\n```\nQuiz-temporal/\n├── docker-compose.yml    # Container orchestration configuration\n└── README.md            # This documentation file\n```\n\n## ⚙️ Configuration Details\n\n### Port Mappings\n\nAll ports have been configured to avoid conflicts with default installations:\n\n| Service | External Port | Internal Port | Purpose |\n|---------|---------------|---------------|---------|\n| PostgreSQL | 5433 | 5432 | Database connections |\n| Temporal API | 7234 | 7233 | Temporal client connections |\n| Temporal UI | 8235 | 8080 | Web interface |\n\n### Environment Variables\n\n**PostgreSQL:**\n```yaml\nPOSTGRES_USER: temporal\nPOSTGRES_PASSWORD: temporal\nPOSTGRES_DB: temporal\n```\n\n**Temporal Server:**\n```yaml\nDB: postgres12\nDB_PORT: 5432\nPOSTGRES_USER: temporal\nPOSTGRES_PWD: temporal\nPOSTGRES_SEEDS: postgres\n```\n\n**Temporal UI:**\n```yaml\nTEMPORAL_ADDRESS: temporal:7233\nTEMPORAL_CORS_ORIGINS: http://localhost:8235\n```\n\n## 🔧 Development Setup\n\n### Connecting Your Application\n\nTo connect your application to this Temporal server:\n\n```javascript\n// Example Node.js connection\nconst { Client } = require('@temporalio/client');\n\nconst client = new Client({\n  serviceUrl: 'localhost:7234',\n  namespace: 'default', // or your custom namespace\n});\n```\n\n```python\n# Example Python connection\nfrom temporalio.client import Client\n\nasync def main():\n    client = await Client.connect(\"localhost:7234\")\n```\n\n### Creating Workflows\n\nOnce connected, you can:\n1. Define workflows and activities in your preferred language\n2. Register workers that connect to `localhost:7234`\n3. Start workflow executions\n4. Monitor them via the web UI at http://localhost:8235\n\n## 🚨 Important Things to Avoid\n\n### ❌ Common Pitfalls\n\n1. **Port Conflicts**\n   - Don't change ports back to defaults (7233, 8233, 5432) if you have other services running\n   - Always check `docker-compose ps` before assuming services are healthy\n\n2. **Missing Dependencies**\n   - Don't start `temporal-ui` before `temporal` server is ready\n   - Don't start `temporal` before `postgres` is ready\n   - The `depends_on` configuration handles this, but manual starts can cause issues\n\n3. **Database Issues**\n   - Don't delete the PostgreSQL container without backing up data\n   - Don't change database credentials after initial setup without updating all services\n   - Don't manually modify the Temporal database schema\n\n4. **Version Compatibility**\n   - Don't mix incompatible versions of Temporal server and UI\n   - Don't upgrade major versions without checking migration guides\n   - Current versions: Server `1.23`, UI `2.21.3`\n\n### ❌ Configuration Mistakes\n\n1. **Environment Variables**\n   ```yaml\n   # ❌ Wrong - Inconsistent database names\n   POSTGRES_DB: temporal\n   POSTGRES_SEEDS: different_postgres\n   \n   # ✅ Correct - Consistent naming\n   POSTGRES_DB: temporal\n   POSTGRES_SEEDS: postgres\n   ```\n\n2. **Network Issues**\n   ```yaml\n   # ❌ Wrong - External port in internal config\n   TEMPORAL_ADDRESS: temporal:8235\n   \n   # ✅ Correct - Internal port for container communication\n   TEMPORAL_ADDRESS: temporal:7233\n   ```\n\n3. **Port Mappings**\n   ```yaml\n   # ❌ Wrong - Conflicting external ports\n   ports:\n     - \"7233:7233\"  # Might conflict with existing Temporal\n   \n   # ✅ Correct - Non-conflicting external ports\n   ports:\n     - \"7234:7233\"  # External 7234 → Internal 7233\n   ```\n\n### ❌ Operations to Avoid\n\n1. **Data Loss Prevention**\n   - Never run `docker-compose down -v` in production\n   - Don't delete volumes without proper backup\n   - Don't restart PostgreSQL container during active workflows\n\n2. **Security Issues**\n   - Don't expose database ports to the internet without proper security\n   - Don't use default credentials in production\n   - Don't disable authentication in production environments\n\n3. **Performance Issues**\n   - Don't run with default resource limits in production\n   - Don't ignore container health checks\n   - Don't start workflows without proper monitoring\n\n## 🔍 Troubleshooting\n\n### Services Not Starting\n\n```bash\n# Check container status\ndocker-compose ps\n\n# View detailed logs\ndocker-compose logs temporal\ndocker-compose logs postgres\ndocker-compose logs temporal-ui\n\n# Restart specific service\ndocker-compose restart temporal\n```\n\n### UI Not Accessible\n\n1. Verify all containers are running: `docker-compose ps`\n2. Check if port 8235 is available: `netstat -an | grep 8235`\n3. Wait for Temporal server to be fully initialized (30-60 seconds)\n4. Check UI logs: `docker-compose logs temporal-ui`\n\n### Database Connection Issues\n\n1. Ensure PostgreSQL is ready: `docker-compose logs postgres`\n2. Verify environment variables match between services\n3. Check if port 5433 is available for external connections\n\n### Port Conflicts\n\n```bash\n# Check what's using your ports\nlsof -i :5433\nlsof -i :7234\nlsof -i :8235\n\n# Change ports in docker-compose.yml if conflicts exist\n```\n\n## 📚 Next Steps\n\n1. **Learn Temporal Concepts**: Read about workflows, activities, and workers\n2. **Choose Your SDK**: Install Temporal SDK for your preferred language\n3. **Build Your First Workflow**: Start with simple examples\n4. **Monitor with Web UI**: Use http://localhost:8235 to observe execution\n5. **Scale Your Setup**: Consider clustering for production use\n\n## 🔗 Useful Links\n\n- [Temporal Documentation](https://docs.temporal.io/)\n- [Temporal SDKs](https://docs.temporal.io/dev-guide)\n- [Docker Compose Documentation](https://docs.docker.com/compose/)\n- [PostgreSQL Documentation](https://www.postgresql.org/docs/)\n\n## 📄 License\n\nThis setup configuration is provided as-is for development purposes.\n\n---\n\n**Note**: This setup is optimized for development. For production deployments, consider additional security, monitoring, and scaling configurations.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshyamg090%2Fquizable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshyamg090%2Fquizable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshyamg090%2Fquizable/lists"}