{"id":23409112,"url":"https://github.com/playfulprogramming/hoof","last_synced_at":"2025-04-12T00:15:54.893Z","repository":{"id":239506238,"uuid":"799602509","full_name":"playfulprogramming/hoof","owner":"playfulprogramming","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-12T13:18:13.000Z","size":1748,"stargazers_count":5,"open_issues_count":9,"forks_count":2,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-06T12:15:43.870Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","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/playfulprogramming.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},"funding":{"open_collective":"unicorn-utterances"}},"created_at":"2024-05-12T16:19:31.000Z","updated_at":"2025-02-17T02:18:51.000Z","dependencies_parsed_at":"2024-12-09T02:19:09.510Z","dependency_job_id":"e9ba30bd-68b9-44b2-87fb-31b352a1f721","html_url":"https://github.com/playfulprogramming/hoof","commit_stats":null,"previous_names":["unicorn-utterances/cms","playfulprogramming/cms","playfulprogramming/hoof"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/playfulprogramming%2Fhoof","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/playfulprogramming%2Fhoof/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/playfulprogramming%2Fhoof/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/playfulprogramming%2Fhoof/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/playfulprogramming","download_url":"https://codeload.github.com/playfulprogramming/hoof/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247608384,"owners_count":20966003,"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":[],"created_at":"2024-12-22T15:28:35.353Z","updated_at":"2025-04-12T00:15:54.869Z","avatar_url":"https://github.com/playfulprogramming.png","language":"Kotlin","readme":"# Hoof\n\n\"Hoof\" provides the backend for Playful Programming's content management experience.\n\nThis repository houses:\n- `hoof-api`: the external-facing REST API\n- `hoof-worker`: a background task runner in NodeJS, for image fetching \u0026 generation\n\n## Getting Started\n\nPrerequisites:\n- [IntelliJ IDEA](https://www.jetbrains.com/idea/)\n- [Java 23](https://jdk.java.net/23/) (can also be installed via IntelliJ: File -\u003e Project Structure -\u003e Project -\u003e SDK)\n- [Node 20](https://nodejs.org/en/download)\n- [Docker](https://www.docker.com/get-started/)\n\nTo start the postgres database:\n```sh\ncp .env.example .env\ndocker compose up --wait\n```\n\nTo run the API server:\n```sh\ncd api\n./gradlew runFlywayMigrate # runs any database migrations\n./gradlew run # (or use the Run button in IntelliJ)\n```\n\nTo start the worker app:\n```sh\ncd worker\n\n# Set up pnpm through Corepack: https://nodejs.org/api/corepack.html\ncorepack enable pnpm\ncorepack install\ncorepack up\n\n# Install dependencies \u0026 run\npnpm install\npnpm run dev\n```\n\n## Deployment\n\n* The database schema is managed by the API, in `src/main/sqldelight/...`\n    * Migrations are executed by `FlywayMigrate.kt`\n    * When you change the schema locally, you'll need to run `./gradlew runFlywayMigrate` yourself.\n    * This runs automatically on deployment, as a result of fly.io's `RELEASE_COMMAND=1` configuration.\n\n* Object Storage is hosted through [Tigris](https://www.tigrisdata.com/)\n    * It's a public bucket with CORS enabled, so that preview builds (on subdomains) can also use it\n    * This is configured in the `S3_*` environment variables\n","funding_links":["https://opencollective.com/unicorn-utterances"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplayfulprogramming%2Fhoof","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplayfulprogramming%2Fhoof","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplayfulprogramming%2Fhoof/lists"}