{"id":20988290,"url":"https://github.com/threated/rutter","last_synced_at":"2026-04-22T12:32:51.436Z","repository":{"id":48413393,"uuid":"471415329","full_name":"Threated/rutter","owner":"Threated","description":null,"archived":false,"fork":false,"pushed_at":"2022-12-12T16:26:36.000Z","size":222,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-20T07:44:05.702Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Svelte","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/Threated.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}},"created_at":"2022-03-18T15:12:06.000Z","updated_at":"2023-01-13T17:11:39.000Z","dependencies_parsed_at":"2023-01-27T22:00:41.618Z","dependency_job_id":null,"html_url":"https://github.com/Threated/rutter","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/Threated%2Frutter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Threated%2Frutter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Threated%2Frutter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Threated%2Frutter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Threated","download_url":"https://codeload.github.com/Threated/rutter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243401412,"owners_count":20285049,"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-11-19T06:19:57.979Z","updated_at":"2025-12-27T16:03:00.577Z","avatar_url":"https://github.com/Threated.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rutter\nThis is a project is a Twitter clone which implements all the basic Twitter features like tweeting, retweeting, liking and following other users. It can also serve at Timeline like where you see all the Tweets from the people you follow. You can discover users by searching for them or seeing their tweets on you Timeline.\n\n## Implementation\nThe frontend is written in [Svelte](https://svelte.dev/) using [svelte-navigator](https://github.com/mefechoel/svelte-navigator) to create a SPA which interfaces with a REST api to fetch all the requiered information.\\\nAuthorization is handled with [JWT](https://jwt.io/)s which are served by the Rust framework [Rocket](https://rocket.rs). This can also serves the frontend, but for development the frontend can be run as its own Microservice via [Node](https://nodejs.org/) to enable HMR see [Local Developement](https://github.com/Threated/rutter#Local-developement).\nThe server uses a [Redisgraph](https://redis.io/docs/stack/graph/) Database to store all tweets and users. The server interfaces with Redis via the [redisgraphio](https://github.com/Threated/redisgraphio) crate which I wrote to enable simple graph queries to access the database.\n\n## Run with Docker\n\n    docker compose up\nThis will serve the app at [localhost:8000](http://localhost:8000)\n\n## Dev requirements\n\n- Docker\n- Rust\n- cargo\n- npm\n\n\n## Local developement\nRun the database:\n\n    docker run -p 6379:6379 -d redislabs/redisgraph:latest\n\nRun the rust backend server:\n\n    cargo run\n\nSetup the frontend in a new terminal:\n\n    cd frontend\n    npm install\n\nTo get HMR run:\n\n    npm run dev\nThis will serve the frontend at [localhost:3000](http://localhost:3000) and enable HMR.\n\nIf you don't need HMR or want to test the production enviroment behavior build the static html:\n\n    npm run build\nNow once we run `cargo run` in the root directory again the Rust server will serve the single page application at [localhost:8000](http://localhost:8000) without requireing a node server\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreated%2Frutter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthreated%2Frutter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreated%2Frutter/lists"}