{"id":43310716,"url":"https://github.com/devries/todo_gleam","last_synced_at":"2026-02-01T21:10:33.269Z","repository":{"id":273256944,"uuid":"919126701","full_name":"devries/todo_gleam","owner":"devries","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-28T18:20:52.000Z","size":123,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-29T07:17:07.073Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Gleam","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/devries.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-01-19T19:12:05.000Z","updated_at":"2026-01-28T18:20:56.000Z","dependencies_parsed_at":"2025-01-19T20:29:58.493Z","dependency_job_id":"f61681ff-1138-4853-b46e-468b5bd54bb0","html_url":"https://github.com/devries/todo_gleam","commit_stats":null,"previous_names":["devries/todo_gleam"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devries/todo_gleam","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devries%2Ftodo_gleam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devries%2Ftodo_gleam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devries%2Ftodo_gleam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devries%2Ftodo_gleam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devries","download_url":"https://codeload.github.com/devries/todo_gleam/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devries%2Ftodo_gleam/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28991160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T20:57:35.821Z","status":"ssl_error","status_checked_at":"2026-02-01T20:57:29.580Z","response_time":56,"last_error":"SSL_read: 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":[],"created_at":"2026-02-01T21:10:32.569Z","updated_at":"2026-02-01T21:10:33.261Z","avatar_url":"https://github.com/devries.png","language":"Gleam","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TODO list\n\nThis is a todo list program written with a server in [Gleam](https://gleam.run/)\nand [HTMX](https://htmx.org/) on the\nfrontend in order to get a better understanding how Gleam and HTMX can work\ntogether. Todo items are saved to a [sqlite](https://www.sqlite.org/) database.\nI use the [wisp](https://gleam-wisp.github.io/wisp/) web framework and the\n[Lustre](https://hexdocs.pm/lustre/index.html) library to generate HTML. \n\nI also decided to use this as a test implementation for trying\n[tailwindcss](https://tailwindcss.com/), and [Litestream](https://litestream.io/).\nIt also does snapshot testing with [Birdie](https://hexdocs.pm/birdie/).\n\nThis is based on my [Go implementation](https://github.com/devries/todo) of\nthe same thing.\n\nI'll just call this the Gleam Wisp Htmx Erlang Lustre Tailscale (GWHELT) stack.\n\n## Deployment to Cloud Run\n\nInitial steps:\n- Create a bucket in Google Cloud Storage to store database updates from Litstream.\n- Create a service account which has the Storage Object Admin role in that bucket.\n- Create a docker image registry in Google Artifact Registry.\n\nThe following environment variables must be set in your `.env` file:\n- TODO_IMAGE - The full image name (without tags)\n  for the gleam application. It should have the prefix given to your Google\n  Artifact Registry image registry.\n- LITESTREAM_IMAGE - The full image  name (without tags) for the litestream\n  database streaming image. It should have the prefix given to your Google\n  Artifact Registry image registry.\n- REGION - Google Cloud Platform Region name in which to deploy.\n- BUCKET_URL - The url (prefixed by gcs://) for the Google Cloud Storage\n  bucket you created.\n- SERVICE_ACCOUNT - The id (looks like an email address) for the service\n  account you created.\n\nThe `make docker` command will create a `cloudbuild.yaml` file and submit the\nproject to Google Cloud Build.\n\nThe `make deploy` command will create a `todo-gleam.yaml` file and deploy the\ncontainers as a Cloud Run service open to the public internet.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevries%2Ftodo_gleam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevries%2Ftodo_gleam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevries%2Ftodo_gleam/lists"}