{"id":20687857,"url":"https://github.com/cribbles/wordle-with-friends","last_synced_at":"2026-02-06T13:32:10.722Z","repository":{"id":94979324,"uuid":"459239269","full_name":"cribbles/wordle-with-friends","owner":"cribbles","description":"Multiplayer Wordle on Hotwire","archived":false,"fork":false,"pushed_at":"2024-11-09T17:37:04.000Z","size":199,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-22T15:12:33.684Z","etag":null,"topics":["hotwire","rails","wordle"],"latest_commit_sha":null,"homepage":"https://friendle.fly.dev/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cribbles.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}},"created_at":"2022-02-14T16:32:17.000Z","updated_at":"2024-11-09T17:37:08.000Z","dependencies_parsed_at":"2023-03-22T00:04:16.063Z","dependency_job_id":null,"html_url":"https://github.com/cribbles/wordle-with-friends","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cribbles%2Fwordle-with-friends","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cribbles%2Fwordle-with-friends/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cribbles%2Fwordle-with-friends/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cribbles%2Fwordle-with-friends/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cribbles","download_url":"https://codeload.github.com/cribbles/wordle-with-friends/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250264911,"owners_count":21402004,"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":["hotwire","rails","wordle"],"created_at":"2024-11-16T22:58:28.925Z","updated_at":"2026-02-06T13:32:05.686Z","avatar_url":"https://github.com/cribbles.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wordle With Friends\n\nThis is a multiplayer Wordle clone written in [Rails 7](https://rubyonrails.org/), using [Hotwire](https://hotwired.dev/) for interactivity and live updates.\n\n## Live\n\nhttps://friendle.fly.dev/\n\n## Local deployment\n\n### Running the application\n\n```sh\n# Enable cache in development mode. You should only have to do this once\nrails dev:cache\n\n# Spin the app up locally\nrails server\n\n# Optionally, you can make each room always resolve to the same five-letter\n# word of your choice -- this is a little nicer for debugging\nSECRET_WORD=xxxxx rails server\n```\n\n## Tests\n\n```sh\nrails test\n```\n\n## How it works\n\nYou know how to [Wordle](https://www.nytimes.com/games/wordle/index.html).\n\nYou can either play solo or with a partner. Entering the app from the root URL drops you into a new room automatically; you can start playing with someone else by sharing the URL with that person, which invites them to join. After each game you can choose to start over with a new word or share your results (using the same formatting as OG Wordle).\n\n### Technical details\n\nThe backend is a fairly standard Rails app with the Room -\u003e Player -\u003e Guess relationships you would expect.\n\nThe frontend is pure Hotwire: basically a mix of ERB templates and Stimulus controllers (see `app/javascript/controllers`), with UI updates driven by websockets via Turbo streams. If you're not familiar with Hotwire, you might also liken this to Phoenix's [LiveView](https://github.com/phoenixframework/phoenix_live_view) paradigm.\n\nProbably the most interesting \"under the hood\" implementation detail is user auth. Each player is allocated an ID and password on creation. The ID is \"public\", i.e. it's baked in to the DOM state (it has to be this way for UI updates, so Turbo knows which frame to append guesses to). The password is only exposed to the user, and only via session data. This enables players to see their own guesses, but not have their partner's guesses revealed (aside from the guess evaluations - i.e., the gray/green/yellow squares) until the game is over.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcribbles%2Fwordle-with-friends","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcribbles%2Fwordle-with-friends","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcribbles%2Fwordle-with-friends/lists"}