{"id":16084923,"url":"https://github.com/rgerum/unofficial-duolingo-stories","last_synced_at":"2025-12-27T07:14:51.789Z","repository":{"id":37350832,"uuid":"266412451","full_name":"rgerum/unofficial-duolingo-stories","owner":"rgerum","description":"This project brings the official Duolingo Stories to new languages, translated by a community effort.","archived":false,"fork":false,"pushed_at":"2024-04-13T20:41:43.000Z","size":11654,"stargazers_count":117,"open_issues_count":15,"forks_count":28,"subscribers_count":11,"default_branch":"master","last_synced_at":"2024-04-14T00:35:01.957Z","etag":null,"topics":["community","cypress","language-learning","nextjs","postgresql","react","web"],"latest_commit_sha":null,"homepage":"https://duostories.org","language":"JavaScript","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/rgerum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":null,"patreon":null,"open_collective":"duostories","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2020-05-23T20:16:46.000Z","updated_at":"2024-04-15T01:35:14.769Z","dependencies_parsed_at":"2023-02-18T20:15:59.807Z","dependency_job_id":"4aabf0f7-bf72-48a4-8896-49e0bba7fc18","html_url":"https://github.com/rgerum/unofficial-duolingo-stories","commit_stats":{"total_commits":1334,"total_committers":17,"mean_commits":78.47058823529412,"dds":"0.22488755622188905","last_synced_commit":"0d1dc9120720a9cea4af2b7cb4e235f1b71a4cb1"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgerum%2Funofficial-duolingo-stories","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgerum%2Funofficial-duolingo-stories/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgerum%2Funofficial-duolingo-stories/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgerum%2Funofficial-duolingo-stories/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rgerum","download_url":"https://codeload.github.com/rgerum/unofficial-duolingo-stories/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237763855,"owners_count":19362310,"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":["community","cypress","language-learning","nextjs","postgresql","react","web"],"created_at":"2024-10-09T13:01:31.901Z","updated_at":"2025-10-23T01:31:17.280Z","avatar_url":"https://github.com/rgerum.png","language":"JavaScript","funding_links":["https://opencollective.com/duostories"],"categories":["TypeScript"],"sub_categories":[],"readme":"# Unofficial Duolingo Stories\n\n[![Cypress Test](https://img.shields.io/endpoint?url=https://cloud.cypress.io/badge/simple/cvszgh/master\u0026style=flat\u0026logo=cypress)](https://cloud.cypress.io/projects/cvszgh/runs)\n[![chat](https://img.shields.io/discord/726701782075572277)](https://discord.com/invite/4NGVScARR3)\n\nThis project brings the official Duolingo Stories to new languages, translated by a community effort.\n\nIt is _not_ an official product of Duolingo, nor is there any plan to integrate it into their platform or app.\n\nIt is hosted at https://duostories.org and reproduces the story experience from the official Duolingo stories.\n\nThe app is based on Next.js with React. It is currently in `next/next-all`.\n\n## How to run locally\n\nFirst you need to set up a PostgreSQL server.\n\nIf you are on Linux you can use the following commands to install Postgres:\n\nUbuntu:\n\n```\nsudo apt install postgresql\n```\n\nFedora:\n\n```\n# Install and initialize PostgreSQL\nsudo dnf install postgresql-server postgresql-contrib\nsudo postgresql-setup --initdb --unit postgresql\n\n# If you get ident errors when running the psql lines below, try switching to md5\n# And don't forget to restart the service!\nsudo sed -i -e 's/ident/md5/g' /var/lib/pgsql/data/pg_hba.conf\n\n# To start postgresql server by default when booting up\nsudo systemctl enable postgresql\n```\n\nTo set it up:\n\n```\nsudo systemctl restart postgresql.service\nsudo -u postgres psql -c \"ALTER USER postgres with encrypted password 'postgres';\"\nexport PGPASSWORD=postgres\n```\n\nThen you need to initialize the database\n\n```\nsudo -u postgres psql -c \"CREATE DATABASE duostories_test_db;\"\npsql -U postgres -h localhost -d duostories_test_db -f database/schema.sql\npsql -U postgres -h localhost -d duostories_test_db -c \\\\dt\n```\n\nNow you need to create a file called `.env.local` in the base folder of the project and add the following \nenvironment variable containing the URL for the Postgres database:\n\n```\nPOSTGRES_URL=postgresql://postgres:postgres@localhost:5432/duostories_test_db\n```\n\nInstall the npm packages\n\n```\nnpm install\n```\n\nCreate fill the database with test data\n\n```\nnpm run init\n```\n\nTo develop you can then run and visit http://localhost:3000\n\n```\nnpm run dev\n```\n\nThe test database contains three uses to test the login process:\n\n| Username | Password | Usage                                |\n| -------- | -------- | ------------------------------------ |\n| user     | test     | To test a normal user login          |\n| editor   | test     | To test login to the editor          |\n| admin    | test     | To test login to the admin interface |\n\n## How to contribute\n\nTo contribute to the project you should open an issue to discuss your proposed change.\nYou can assign the issue to yourself to show that you want to work on that.\nIf there is a consensus that this bug should be fixed or this feature should be implemented,\nthen follow the following steps:\n\n- create a fork of the repository\n- clone it to your computer\n- create a branch for your feature\n- make the changes to the code\n- commit and push the changes to GitHub\n- create a pull request\n\nPlease make sure to only commit changes to files that are necessary to the issue.\nTry to not commit accidentally other changes, e.g. package-lock.json files.\nThis makes it harder to review and merge the pull request.\n\nIf everything is fine, I will accept the pull request and I will soon upload it to the website.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgerum%2Funofficial-duolingo-stories","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frgerum%2Funofficial-duolingo-stories","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgerum%2Funofficial-duolingo-stories/lists"}