{"id":32629274,"url":"https://github.com/sebyx07/crystal-react-todo-lucky","last_synced_at":"2026-05-07T09:33:15.837Z","repository":{"id":320811201,"uuid":"1083426415","full_name":"sebyx07/crystal-react-todo-lucky","owner":"sebyx07","description":"Todo list built with crystal and react","archived":false,"fork":false,"pushed_at":"2025-10-26T01:57:00.000Z","size":1059,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-28T20:29:16.790Z","etag":null,"topics":["crystal","react"],"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/sebyx07.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-10-26T01:42:55.000Z","updated_at":"2025-11-15T10:43:41.000Z","dependencies_parsed_at":"2025-10-26T03:29:43.248Z","dependency_job_id":"a4834036-fe56-4444-8de5-e3e7f36c6c92","html_url":"https://github.com/sebyx07/crystal-react-todo-lucky","commit_stats":null,"previous_names":["sebyx07/crystal-react-todo-lucky"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sebyx07/crystal-react-todo-lucky","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebyx07%2Fcrystal-react-todo-lucky","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebyx07%2Fcrystal-react-todo-lucky/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebyx07%2Fcrystal-react-todo-lucky/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebyx07%2Fcrystal-react-todo-lucky/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sebyx07","download_url":"https://codeload.github.com/sebyx07/crystal-react-todo-lucky/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sebyx07%2Fcrystal-react-todo-lucky/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32731424,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"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":["crystal","react"],"created_at":"2025-10-30T22:22:05.363Z","updated_at":"2026-05-07T09:33:15.832Z","avatar_url":"https://github.com/sebyx07.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💎 Crystal Todo List\n\nA modern todo list application built with [Lucky Framework](https://luckyframework.org), Crystal, and React.\n\n## ✨ Features\n\n- ✅ Full CRUD operations for todos\n- 🔄 Mark todos as completed/pending\n- 📝 Edit todos inline\n- 🔐 User authentication (JWT + Sessions)\n- ⚡ React 19 SPA with React Compiler optimization\n- 🎨 Bootstrap 5 UI\n- 🗄️ PostgreSQL database\n- 🧪 Full test coverage (Frontend + Backend)\n- 🐳 Docker support for development\n- 🔒 Optional SSL/TLS support\n\n## 🚀 Tech Stack\n\n- **Backend:** Crystal 1.18.2 + Lucky Framework 1.4.0\n- **Frontend:** React 19 + TypeScript + React Compiler\n- **Database:** PostgreSQL 14\n- **Runtime:** Bun v1.3.1 (assets \u0026 tests)\n- **Styling:** Bootstrap 5 + Sass\n- **Testing:** Crystal Spec + Vitest + React Testing Library\n\n### 🛠️ Quick Start (Docker - Recommended)\n\nAll development is done via Docker Compose using the `bin/` scripts:\n\n```bash\n# Start the development server (includes database setup)\nbin/dev\n```\n\nThat's it! The app will be available at `http://localhost:3000` (or `https://localhost:3000` with SSL)\n\n### 🐳 Available Commands\n\nAll scripts automatically handle Docker Compose for you:\n\n```bash\n# Development\nbin/dev               # Start development server with hot reload\n\n# Testing\nbin/spec              # Run all specs (Backend + Frontend)\nbin/spec spec/requests/todos/         # Run specs in directory\nbin/spec spec/requests/todos/index_spec.cr  # Run specific file\n\n# Linting \u0026 Formatting\nbin/lint              # Auto-format all files (Crystal + JS/TS)\nbin/lint --check      # Check formatting without modifying\n```\n\n### 🗄️ Database\n\nPostgreSQL runs in Docker via `docker compose`:\n- **Not exposed to host** (secure by default)\n- **Accessed via container network only**\n- Automatically managed by bin scripts\n\n### ⚙️ Environment Configuration\n\nThe application uses `.env.development.local` for local development settings:\n- APP_DOMAIN: dev-1.venom.is (for production SSL)\n- PORT: 5000 (container-to-container port)\n- DATABASE_URL: Automatically set by bin scripts\n\nFor SSL/TLS configuration, see [docs/ssl-setup.md](docs/ssl-setup.md)\n\n### 🌐 API Endpoints\n\n**Authentication:**\n- `POST /api/sign_ins` - Sign in (returns JWT token)\n- `POST /api/sign_ups` - Create account\n- `DELETE /api/sign_ins` - Sign out\n\n**Todos:**\n- `GET /api/todos` - List todos (paginated, sorted by updated_at desc)\n- `POST /api/todos` - Create a new todo\n- `PATCH /api/todos/:id` - Update a todo\n- `DELETE /api/todos/:id` - Delete a todo\n\n\n### 💻 VSCode / code-server Setup\n\nThe project includes full VSCode/code-server configuration:\n\n**Quick setup:**\n```bash\nbin/setup-vscode\n```\n\nThis configures:\n- ✅ Crystal language server with Docker integration\n- ✅ Syntax highlighting and IntelliSense\n- ✅ Format on save\n- ✅ Jump to definition\n- ✅ Integrated tasks (Ctrl+Shift+B to run dev server)\n- ✅ Test runner (Ctrl+Shift+T)\n- ✅ Debugging support\n\n**Available tasks** (Ctrl+Shift+P → \"Tasks: Run Task\"):\n- Run All Tests\n- Run Current Test File\n- Start Development Server\n- Format Code\n- Check Code Format\n- Run Database Migrations\n- Docker Compose Up/Down\n\n**Files:**\n- `.vscode/settings.json` - Crystal LSP and editor config\n- `.vscode/tasks.json` - Integrated tasks\n- `.vscode/launch.json` - Debug configurations\n- `.vscode/extensions.json` - Recommended extensions\n- `.editorconfig` - Cross-editor formatting\n\n## 📚 Learning Resources\n\nLucky uses the [Crystal](https://crystal-lang.org) programming language. You can learn about Lucky from the [Lucky Guides](https://luckyframework.org/guides/getting-started/why-lucky).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebyx07%2Fcrystal-react-todo-lucky","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsebyx07%2Fcrystal-react-todo-lucky","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebyx07%2Fcrystal-react-todo-lucky/lists"}