{"id":41376910,"url":"https://github.com/iomz/gyre-clone","last_synced_at":"2026-01-23T10:13:01.884Z","repository":{"id":318461041,"uuid":"1071180591","full_name":"iomz/gyre-clone","owner":"iomz","description":"A clone of GYRE \"World Reflector\"","archived":false,"fork":false,"pushed_at":"2025-11-16T02:50:15.000Z","size":286,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-16T04:29:06.909Z","etag":null,"topics":["archimedean-spiral","nextjs","vercel","webspeech-api"],"latest_commit_sha":null,"homepage":"https://gyre-clone.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iomz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-07T01:35:38.000Z","updated_at":"2025-11-16T02:50:18.000Z","dependencies_parsed_at":"2025-10-07T11:35:08.505Z","dependency_job_id":"3735e5ce-6ac2-4d79-b2bf-dc25465ad6ae","html_url":"https://github.com/iomz/gyre-clone","commit_stats":null,"previous_names":["iomz/gyre-clone"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/iomz/gyre-clone","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fgyre-clone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fgyre-clone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fgyre-clone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fgyre-clone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iomz","download_url":"https://codeload.github.com/iomz/gyre-clone/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iomz%2Fgyre-clone/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28687416,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"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":["archimedean-spiral","nextjs","vercel","webspeech-api"],"created_at":"2026-01-23T10:13:01.140Z","updated_at":"2026-01-23T10:13:01.874Z","avatar_url":"https://github.com/iomz.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Header Image](https://github.com/user-attachments/assets/0d002385-5e36-4b62-be8c-cd0b562ad24f)\n\n# GYRE Clone\n\n[![build status](https://github.com/iomz/gyre-clone/workflows/docker/badge.svg)](https://github.com/iomz/gyre-clone/actions?query=workflow%3Adocker)\n\nMore than a decade ago, [a shopping complex located at Omotesando, Tokyo](https://gyre-omotesando.com/) had an inspiring website displaying swirling words flowing into vortex.\nI was just so keen to recreate the same or at least similar concept design to gain that nearly meditating feeling of watching the gyre.\n\nThe original work was produced by THA LTD, as \"[GYRE WORLD REFLECTOR](https://tha.jp/45).\"\n_All the credits go to them_ – I just merely enjoy the visual and the sound by myself.\n\nThe text is generated by ChatGPT and stored in MongoDB. The app fetches the text based on the selected language and the topic. The text is then spoken using Web Speech API.\n\nThe recommended platform is Chrome on macOS, at the moment. Topics and languages can be easily extended by registering new entries to the DB.\n\nSee the running example at https://gyre-clone.vercel.app\n\n## Synopsis\n\nIf you are not using Vercel and want to self-host the app:\n\n1. Rename the `.env.local.example` to `.env.local`, which contains a MongoDB URL to access the docker service.\n\n```console\nmv .env.local.example .env.local\n```\n\n2. Download a preset data (`messages.json`) inside `/data` directory to seed the database.\n\n```console\nmkdir data \u0026\u0026 curl -o data/messages.json https://gyre-clone.vercel.app/api/message/export\n```\n\n3. Build the docker image.\n\n```console\ndocker compose build\n```\n\n4. Run the services; the app is up and running at localhost:9763\n\n```console\ndocker compose up -d\n```\n\n## Extend the topics and the languages\n\n1. Create a new text file contains _a paragraph per line_. The file name should be `\u003ctopic\u003e_\u003clanguage code\u003e.txt` (e.g., `food_en-GB.txt`).\n2. Run the `scripts/post.js` with your `endpoint` and `dir` that contains the text file(s). In the example below, the text file is placed under `data` directory.\n\n```console\nnode scripts/post.js http://localhost:9763/api/message data\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiomz%2Fgyre-clone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiomz%2Fgyre-clone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiomz%2Fgyre-clone/lists"}