{"id":14989423,"url":"https://github.com/tunapanda/wikonnect","last_synced_at":"2025-04-12T00:31:42.912Z","repository":{"id":36507304,"uuid":"215237374","full_name":"tunapanda/wikonnect","owner":"tunapanda","description":"Wikonnect seeks to bridge the digital divide through the provision of digital literacy skills. Management support through Asha (www.asha.io).","archived":false,"fork":false,"pushed_at":"2023-03-04T15:02:08.000Z","size":20797,"stargazers_count":31,"open_issues_count":49,"forks_count":51,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-04-10T04:45:23.987Z","etag":null,"topics":["education","emberjs","h5p","koajs","postgresql"],"latest_commit_sha":null,"homepage":"https://app.wikonnect.org","language":"JavaScript","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/tunapanda.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-10-15T07:42:03.000Z","updated_at":"2024-01-02T14:58:40.000Z","dependencies_parsed_at":"2023-02-19T02:46:02.637Z","dependency_job_id":"b1f46f41-0f27-4d34-ba48-5b8703e74335","html_url":"https://github.com/tunapanda/wikonnect","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/tunapanda%2Fwikonnect","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tunapanda%2Fwikonnect/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tunapanda%2Fwikonnect/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tunapanda%2Fwikonnect/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tunapanda","download_url":"https://codeload.github.com/tunapanda/wikonnect/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248501301,"owners_count":21114647,"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":["education","emberjs","h5p","koajs","postgresql"],"created_at":"2024-09-24T14:18:20.844Z","updated_at":"2025-04-12T00:31:41.627Z","avatar_url":"https://github.com/tunapanda.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-9-orange.svg?style=flat-square)](#contributors)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n  \u003cimg  height=\"200\" src=\"https://app.wikonnect.org/images/icons/wikonnect-primary.svg\"\u003e\n\n\n\u003ch1 align=\"center\"\u003eWelcome to Wikonnect 👋\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Version\" src=\"https://img.shields.io/badge/version-0.1.0-blue.svg?cacheSeconds=2592000\" /\u003e\n  \u003ca href=\"https://docs.wikonnect.org/\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Documentation\" src=\"https://img.shields.io/badge/documentation-yes-brightgreen.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"#\" target=\"_blank\"\u003e\n    \u003cimg alt=\"License: MIT\" src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" /\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"#\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Issues\" src=\"https://img.shields.io/github/issues/tunapanda/wikonnect\" /\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"#\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Forks\" src=\"https://img.shields.io/github/forks/tunapanda/wikonnect\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"#\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Stars\" src=\"https://img.shields.io/github/stars/tunapanda/wikonnect\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# Wikonnect\n\nWikonnect is an open-source e-learning platform designed to allow anyone to learn, create educational content, and\ncontribute to building the platform as a designer or a software developer. The initial courses offered on the platform will be around digital literacy, to get more people\nusing the internet in more productive ways. Developed by [Tunapanda Institute](https://tunapanda.org/) in Nairobi, Kenya. The original platform (called 'Swag') was used to provide technology, design, and business training in low-income communities with low\nbandwidth.\n\nCome say hi 👋 on our [Wikonnect Community Discord Server!](https://discord.gg/tT9Ug6D)\n\n\nGetting Started\n--\nThe frontend is developed using Ember.js. We\nrecommend [getting started](https://guides.emberjs.com/release/getting-started/quick-start/) with Ember by going through\nthe tutorials.\n\nThe backend is developed using [KoaJS](https://koajs.com/). The API docs are hosted\nat [tunapanda.github.io/wikonnect](https://tunapanda.github.io/wikonnect)\n\n## Wikonnect Tech Stack\n\n- [EmberJS](https://guides.emberjs.com) for frontend.\n- [KoaJS](https://koajs.com/) for backend API.\n- [Objection.js](https://vincit.github.io/objection.js/) as an ORM\n  and [Knex.js](https://gist.github.com/NigelEarle/80150ff1c50031e59b872baf0e474977) for building SQL queries\n- [PostgreSQL](https://www.postgresql.org/) for main persistence storage.\n- [chai](https://www.chaijs.com/) for backend unit tests.\n- [Cypress](https://cypress.io) for frontend integration tests.\n- [Yarn](https://yarnpkg.com/) project package manager.\n\n  #### Optional:\n- [ElasticSearch](https://www.elastic.co/) for search and indexing services\n- [Docker](https://www.docker.com/) for containerization\n\n## Development setup\n\n- Clone the project using [Git](https://git-scm.com/) into your workspace:\n\n```\n  git clone https://github.com/tunapanda/wikonnect.git\n ```\n\n- Proceed to set up the development environment [manually](#manual-project-setup) or using [Docker](#docker-project-setup).\n\n### Docker project setup\n\n---\n\n#### Prerequisites\n\n- Docker Engine\n\n##### Docker engine installation\n\n- [Ubuntu installation](https://docs.docker.com/engine/install/ubuntu/)\n- [Fedora installation](https://docs.docker.com/engine/install/fedora/)\n- [Debian installation](https://docs.docker.com/engine/install/debian/)\n- [Mac installation](https://docs.docker.com/docker-for-mac/install/) - Installed as docker desktop\n- [Windows installation](https://docs.docker.com/docker-for-windows/install/)  - Installed as docker desktop\n\n##### Starting a development server\n\n1) If your Docker engine instance is running on your terminal, navigate into the **project root directory**:\n\n```\ncd wikonnect/\n```\n\n2) **Copy** the `.env-sample` configuration file to `.env`. (Never commit this file)\n\n3) Update the above `.env` file configurations to match your desired setup.\n\n4) Build and run the project container services using the `docker-compose` command:\n    ```\n      docker-compose up --build\n    ````\n\n**NOTE** The ``NODE_ENV`` should be set as ``development`` to allow live reload on code changes.\n\n\n### Manual project setup\n\n---\n\n#### Prerequisites\n\n- Node.js v14.16.0\n- PostgreSQL database server\n\n##### Setting up Node.js\n\nFollow instructions on how to download and install Node.js based on your operating system from\nthe [official Node.js website](https://nodejs.org/en/download/).\n\nEnsure you install Node v14.16.0\n\n##### Setting up PostgreSQL\n\n- [Ubuntu installation](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04)\n- [Fedora installation](https://fedoraproject.org/wiki/PostgreSQL)\n- [OSX installation](https://www.codementor.io/engineerapart/getting-started-with-postgresql-on-mac-osx-are8jcopb)\n- [Windows installation](http://www.postgresqltutorial.com/install-postgresql/)\n\nCreate a postgres user (with password), and set up a database for the project (Don't forget to grant privileges to the user\non the database!). :\n\n```SQL\n=# CREATE USER wikonnect_user WITH PASSWORD 'password';\n=# CREATE DATABASE wikonnect;\n=# GRANT ALL PRIVILEGES ON DATABASE wikonnect TO wikonnect_user;\n```\n\n#### Starting a development server\n\nInstall the project-wide dependencies on the **root project directory**...\n\n```\ncd wikonnect/\nyarn\n```\n\n##### Backend (API) setup\n\n---\n\nBackend set up steps:\n\n1) Navigate into the **server** directory\n    ```\n    cd server/\n    ```\n2) Install the backend dependencies\n    ```\n    yarn\n    ```\n\n3) **Copy** the database configuration file `server/config/db.example.js` to `server/config/db.js`\n\n4) Replace the database configuration to match your development database. (Do not use the development database in a\n   production environment)\n\n    ```js\n    development: {\n        host: 'localhost',\n        database: 'my_database',\n        user: 'my_user',\n        password: 'my_password',\n      }\n    ```\n5) **Copy** the email configuration file `server/config/email.example.js` to `server/config/email.js`\n\n6) You can use Mailtrap for an email sandbox environment. Set up a [mailtrap.io](https://mailtrap.io/) account and copy the credentials provided for Nodemailer setup into the development section of the `server/config/email.js` file eg:\n\n    ```js\n    development: {\n        provider: \"smtp.mailtrap.io\",\n        auth: {\n          user: \"xxxxxxxxxxxx\",\n          pass: \"xxxxxxxxxxxx\",\n        },\n        defaultFrom: process.env.FROM_EMAIL_ADDRESS,\n      },\n    ```\n\n5) Assuming the Postgres server is ready and above [configuration](server/config/db.js) credentials are correct, run the\n   latest migrations (defined in `server/migrations`):\n    ```\n     yarn db:init\n    ```\n\n6) **Optionally**, one can populate the database with dummy data (defined in `server/db/seeds`) by running:\n    ```\n     yarn db:seed\n    ```\n\n7) If the above steps were successful, you can finally start the backend server\n   ```\n   yarn start\n   ```\n\n**NOTE**: You can safely ignore any Elasticsearch connection error.\n\n##### Frontend setup\n\n---\nFrontend set up steps:\n\n1) Navigate into the **frontend** directory\n    ```\n    cd frontend/\n    ```\n2) Install the frontend dependencies\n    ```\n    yarn\n    ```\n3) Start the frontend server\n   ```\n   yarn start\n   ```\n4) If the above steps were successful, navigate to your favorite browser and go to http://localhost:4200/ to see the running\n   app.\n\n***NOTE***: For easy Ember addons installation and project files generation using available blueprints, we highly\nrecommend installing [Ember CLI](https://github.com/ember-cli/ember-cli) globally:\n```\nyarn install -g ember-cli\n```\n\n## UI/UX Designs\n\n---\n\n### Learn\n\n- [Authentication](https://xd.adobe.com/view/ce0b8ac3-0e43-4ccd-ad2f-ca86803f522f-9b58/)\n- [Password Reset](https://xd.adobe.com/view/c8cdd600-0ec7-4557-a497-7bcf80177a5e-9d9e/)\n- [Course Builder](https://xd.adobe.com/view/9b6c6240-2411-40da-bc02-39c409e62f88-ce3f/)\n- [Single Chapter Page](https://xd.adobe.com/view/87f725be-e199-4bf6-bd01-7f4ead3c9e6c-d2a4/)\n\n### Teach\n- [Teach landing page (unauthenticated)](https://xd.adobe.com/view/f3336f85-ec94-47a0-9ed1-1c16d09fd346-a660/)\n- [Chapter Creation](https://xd.adobe.com/view/7b76ab64-b1e6-4c55-9add-3e15624234c7-2e25/) \n- [Dashboard for Content Creators](https://xd.adobe.com/view/0ef6c435-70eb-4508-95df-5899d2821970-5ba5/)\n\n### Admin Dashboard\n- [Content Approval](https://xd.adobe.com/view/8e585111-f208-4fd8-9c09-f0f71221b61f-db0b/)\n- [Leaderboad and Badge Management](https://xd.adobe.com/view/744fa986-7674-4c71-b77a-fdb50a4e806b-211c/)\n- [User Management](https://xd.adobe.com/view/743f7d0d-7153-4842-a024-73168a04efea-216c/)\n- [Monitoring and Evaluation Survey Managment](https://xd.adobe.com/view/cdf5137c-29dc-4154-b5d3-166a2daa699c-98a6/)\n\n\n## Contributing\n\n- You should join our [Discord](https://discord.gg/tT9Ug6D) server to get connected with people interested in this\n  project and to be aware of our future announcements.\n- Please read the\n  suggested [steps to contribute code to the Wikonnect project](https://github.com/tunapanda/wikonnect/blob/master/CONTRIBUTING.md)\n  before creating issues, forking, or submitting any pull requests.\n\n## License\n\nThis project is licensed under MIT. See the [license](https://github.com/tunapanda/wikonnect/blob/master/LICENCE.md) file for details\n\n## Authors 🧙\n\n### Developers\n\n- **[Moses Okemwa](https://github.com/mosesokemwa)** - _Lead Backend developer and maintainer_\n- **[Proverbial Ninja](https://github.com/proverbial-ninja)** - _Lead Frontend developer and maintainer_\n- **[Murage Martin](https://github.com/mimidotsuser)** - _Full Stack Developer_\n- **[Brian Marete](https://github.com/brianmarete)** - _Frontend Developer_\n\n\n### UI/UX Designers\n- **[Yego Kelvins](https://www.behance.net/kevinsyego)**\n- **[Nathan Macharia](https://github.com/macharian8)**\n### Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/mosesokemwa\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/13944912?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMoses Okemwa\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tunapanda/wikonnect/commits?author=mosesokemwa\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#design-mosesokemwa\" title=\"Design\"\u003e🎨\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/proverbial-ninja\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/2375904?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKiki\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tunapanda/wikonnect/commits?author=proverbial-ninja\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#design-proverbial-ninja\" title=\"Design\"\u003e🎨\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/mrlarso\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/5390448?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003emrlarso\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tunapanda/wikonnect/commits?author=mrlarso\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Jakeii\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/1731150?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJake Lee Kennedy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tunapanda/wikonnect/commits?author=Jakeii\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/bkmgit\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/1679477?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBenson Muite\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tunapanda/wikonnect/commits?author=bkmgit\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"http://colleowino.github.io/\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/2420182?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCliff Owino\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tunapanda/wikonnect/commits?author=colleowino\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Mutugiii\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/48474421?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMutugi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tunapanda/wikonnect/commits?author=Mutugiii\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/avicndugu\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/37213663?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAvic Ndugu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tunapanda/wikonnect/commits?author=avicndugu\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://bonfacemunyoki.com/\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/11820306?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBonfaceKilz\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tunapanda/wikonnect/commits?author=BonfaceKilz\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-enable --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003ch3\u003eHappy Coding ❤︎\u003c/h3\u003e\n\u003c/div\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftunapanda%2Fwikonnect","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftunapanda%2Fwikonnect","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftunapanda%2Fwikonnect/lists"}