{"id":22749426,"url":"https://github.com/hissinger/small-village","last_synced_at":"2025-06-25T22:01:58.983Z","repository":{"id":260045728,"uuid":"880132746","full_name":"hissinger/small-village","owner":"hissinger","description":"Small Village is a project that will be developed similarly to Gather Town. It will be a serverless service built using Supabase, ReactJS, WebRTC, Phaser, and Netlify.","archived":false,"fork":false,"pushed_at":"2025-01-11T14:27:35.000Z","size":855,"stargazers_count":14,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-14T12:55:40.141Z","etag":null,"topics":["cloudflare-calls","gather-town","metaverse","phaser3","reactjs","serverless","supabase","typescript","webrtc"],"latest_commit_sha":null,"homepage":"https://smallvillage.netlify.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hissinger.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}},"created_at":"2024-10-29T07:12:31.000Z","updated_at":"2025-01-16T04:13:08.000Z","dependencies_parsed_at":"2024-12-10T18:37:46.657Z","dependency_job_id":"e7ca0af4-7402-4285-bb16-ccc953aff07d","html_url":"https://github.com/hissinger/small-village","commit_stats":null,"previous_names":["hissinger/small-village"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hissinger/small-village","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hissinger%2Fsmall-village","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hissinger%2Fsmall-village/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hissinger%2Fsmall-village/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hissinger%2Fsmall-village/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hissinger","download_url":"https://codeload.github.com/hissinger/small-village/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hissinger%2Fsmall-village/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261960489,"owners_count":23236568,"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":["cloudflare-calls","gather-town","metaverse","phaser3","reactjs","serverless","supabase","typescript","webrtc"],"created_at":"2024-12-11T04:08:53.963Z","updated_at":"2025-06-25T22:01:58.944Z","avatar_url":"https://github.com/hissinger.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://velog.velcdn.com/images/woody_ahn/post/5e3c1f0d-a06b-4df2-87ab-a168c2d5a854/image.png)\n\n# Small Village\n\nSmall Village is a project that will be developed similarly to Gather Town. It will be a serverless service built using Supabase, ReactJS, WebRTC, Phaser, and Netlify.\n\nJoin the village and start chatting with other villagers. https://smallvillage.netlify.app\n\n\n## Architecture\n- **Supabase**: Supabase is used as a database to store user information and chat messages.\n- **Cloudflare Calls**: Cloudflare Calls is SFU media server that is used to create voice calls between users.\n\n\n## Installation\n\nThis project is developed based on a serverless architecture, so you don’t need to prepare a server. All you need to do is sign up for Supabase and Cloudflare.\n\n### Supabase Schema\nfirst, you have to create a table in the Supabase database. `schema.sql` file contains the schema for the Supabase database. You can run this file in the SQL editor of the Supabase dashboard.\n\n### Environment Variables\nCreate a `.env` file in the root directory of the project and add the following environment variables.\n\n1. supabase environment variables\n- `REACT_APP_SUPABASE_URL`: Supabase URL\n- `REACT_APP_SUPABASE_KEY`: Supabase Key\n\n2. turn server environment variables\n- `REACT_APP_TURN_SERVER_URL`: Turn server URL\n- `REACT_APP_TURN_SERVER_USERNAME`: Turn server username\n- `REACT_APP_TURN_SERVER_CREDENTIAL`: Turn server credential\n\n3. cloudflare environment variables\n- `REACT_APP_CLOUDFLARE_APP_ID`: Cloudflare app id\n- `REACT_APP_CLOUDFLARE_APP_SECRET`: Cloudflare app secret\n\n### npm install\n\n```bash\nnpm install\n```\n\n## Running\n\n```bash\nnpm start\n```\n\n\n## References\n- [Modular Game Worlds in Phaser 3 (Tilemaps #1) — Static Maps](https://medium.com/@michaelwesthadley/modular-game-worlds-in-phaser-3-tilemaps-1-958fc7e6bbd6)\n- [Cloudflare Calls documents](https://developers.cloudflare.com/calls/)\n- [Using WebRTC + React + WebAudio to create spatial audio](https://blog.livekit.io/tutorial-using-webrtc-react-webaudio-to-create-spatial-audio/)\n\n## Assets\n- https://itch.io/\n- https://limezu.itch.io/serenevillagerevamped\n- https://gamebetweenthelines.itch.io/top-down-pixel-art-characters\n\n## License\n\nThis project is licensed under the Apache License, Version 2.0.  \nYou may use, modify, and distribute this software in compliance with the License.  \n\nA copy of the License is available at:  \n[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  \nSee the License for the specific language governing permissions and limitations under the License.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhissinger%2Fsmall-village","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhissinger%2Fsmall-village","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhissinger%2Fsmall-village/lists"}