{"id":15013436,"url":"https://github.com/SparkEdUAB/sparked-legacy","last_synced_at":"2026-03-13T07:30:20.091Z","repository":{"id":37960616,"uuid":"106306244","full_name":"SparkEdUAB/SparkEd","owner":"SparkEdUAB","description":"Software for organizing and presenting educational and training content for delivery on most platforms.","archived":false,"fork":false,"pushed_at":"2025-01-16T15:58:14.000Z","size":7641,"stargazers_count":15,"open_issues_count":18,"forks_count":15,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-02-20T17:13:34.161Z","etag":null,"topics":["crossplatform","education","hacktoberfest","meteorjs","mongodb","reactjs","sparked"],"latest_commit_sha":null,"homepage":"","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/SparkEdUAB.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2017-10-09T16:13:24.000Z","updated_at":"2024-10-24T00:28:28.000Z","dependencies_parsed_at":"2024-04-17T16:55:39.104Z","dependency_job_id":null,"html_url":"https://github.com/SparkEdUAB/SparkEd","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SparkEdUAB%2FSparkEd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SparkEdUAB%2FSparkEd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SparkEdUAB%2FSparkEd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SparkEdUAB%2FSparkEd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SparkEdUAB","download_url":"https://codeload.github.com/SparkEdUAB/SparkEd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239918813,"owners_count":19718408,"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":["crossplatform","education","hacktoberfest","meteorjs","mongodb","reactjs","sparked"],"created_at":"2024-09-24T19:44:16.669Z","updated_at":"2026-03-13T07:30:19.999Z","avatar_url":"https://github.com/SparkEdUAB.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/SparkEdUAB/SparkEd) \n\n# SparkEd\n\n[![Build Status](https://travis-ci.com/SparkEdUAB/SparkEd.svg?branch=master)](https://travis-ci.com/SparkEdUAB/SparkEd)\n[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n\u003e Software for organizing and presenting educational and training content for delivery on most platforms.\n\nSparkEd was deployed on a server and it loaded more than 1,500 resources. It worked very well in an office setting and was tested with 20 hosts. We plan to deploy the system in a school with more than 600 students.\n\nTo get started check out [our wiki](https://github.com/SparkEdUAB/SparkEd/wiki)\n\n[Check here](https://sparkeduab.github.io/sparked-manual/) for the online documentation how to use this project and a small demo here https://sparkedv2.herokuapp.com/ accessible on big screens.\n\n**Note**: We only support Node^10  \n\n# For Contributors\n\n\u003e Read the Code of Conduct [here](https://github.com/SparkEdUAB/SparkEd/blob/master/CODE_OF_CONDUCT.md)\n\nThe project uses the following stack\n\n- **Meteor** as the overall framework\n- **React** as the User Interface library\n- **eslint** to lint files\n- **Jest** for testing\n- **MongoDB** as a noSql Database\n\n### Development\n\nif you don't have meteor run the script below\n\n`curl https://install.meteor.com/ | sh`\n\n### For Windows Users\n\nDownload and install `git`\n\nUse **PowerSell** in administrator mode\n\n\u003e Go through the **requirements** found [here](https://chocolatey.org/install) before installing **meteorjs**\n\nAfter doing the above now you can install **meteor**\n\n`choco install meteor`\n\nAfter installing **meteor** use git to clone the repo **WINDOWS USERS**\n\nClone the repo\n\n`git clone https://github.com/SparkEdUAB/SparkEd.git`  \n`cd SparkEd`\n\nInstall dependencies\n\n`meteor npm install` or `meteor yarn`\n\nRun the application\n\n`meteor`\n\nIf you have challenges with language translations, you need to set the environment variables\n\n`export UNIVERSE_I18N_LOCALES = all`\n\n### Contribution\n\nFork this repo\n\nClone your forked repo\n\n`git clone https://github.com/your-github-username/SparkEd.git`\n\nAdd this repo to your remotes as upstream.\n\n`git remote add upstream https://github.com/SparkEdUAB/SparkEd`\n\nBefore pushing anything to your fork, always\n\n`git pull upstream master`\n\n\u003e Make sure your commit messages should be clear not vague e.g \"Changes and Updates made\"  \n\u003e Work from a branch other than master whenever possible and branch name should be clear  \n\u003e Write clean and transparent code which is easy to maintain  \n\u003e When making PRs, give clear descriptions of the changes you made.\n\n### Testing\n\n`npm run test` or `yarn run test`\n\n### linting\n\n`npm run lint` or `yarn run lint`\n\nBefore you make commit, make sure that the linting are passing, check with the eslintrc.yml to check the rules.\n\n## Sync\n\n- References\n- Resources  \n\n  The above are all stored in MongoDB GridFS that means there is no need to access the filesystem to get images or videos, mongodb chunks them down.\n  \n  ⇒ The move was to facilitate the easy of moving files across servers.  \n  ⇒ Having One database for files and Data.  \n  ⇒ Easy Syncing  \n\nWe have 2 scripts,\n\n\u003e one exports the specified database collection from the main server, it will be checking every 24 hours.  \n\u003e The other scripts downloads the exported database collection from the main server, and merges the local server with new data.  \n\nExample of the script (exports chunks)\n\n```\ncolls=( fs.chunks fs.files Resources References)\nif [ -d  \"dump\" ] ;  then\n\techo \"Directory exist and will be removed\"\n\tsleep 1\n\techo \"Removing the directory\"\n\tsleep 2\n\trm -rf dump dump.tar.gz\nfi\nfor  coll  in  ${colls[@]}\n\tdo\n\techo  $coll\n\t# for the remote main server\n\tmongodump -h localhost:27017 -d sparked -c $coll\ndone\n\necho \"compressing the dumped directory \"\n\ntar cvzf /var/www/sparked/bundle/public/dump.tar.gz dump/\n# bundle and send to the public to be downloadable (main server)\n\n```\n\n### Authenticating via REST Endpoint\n\nMeteor's standard is to use the DDP between the server and client and this gives realtime that no other framework offers, but there are times when you don't need this magic and you just want to have your own client using different technologies.\nWe have REST endpoint implemented for critical routes and in case you want to login here is an example  \n\n```\n// Here you can use either username or email for authentication\nconst data = { email: 'a@abc.com', password: '34rnf322{#998!!' };\n\n  fetch('https://localhost:3000/api/login', {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n    },\n    body: JSON.stringify(data),\n  })\n  .then(response =\u003e response.json())\n  .then(data =\u003e {\n    // you will get the userId and authToken that you can use for other server calls\n    console.log('Success:', data);\n  })\n  .catch((error) =\u003e {\n    console.error('Error:', error);\n  });\n\n```\n\n\n### Deployment\n\n**SparkEd** was meant to run in an offline environment but you are initially required to have internet to have it deployed, you can check [our wiki](https://github.com/SparkEdUAB/SparkEd/wiki) for more info on setting up a proper server.\n\nThe wiki mentioned above includes deployment as well, the guide I am going to show is to allow you to simply put up a stable server that in a shorter time.  \nJust like in Development mentioned [here](https://github.com/SparkEdUAB/SparkEd#development) I will assume that you have a working version of SparkEd on your local machine, you can follow the instructions mentioned above in the development to get it running.\n\n#### Requirements\n\n- Nodejs ˆ10\n- Latest version of `npm` or `yarn`\n- Access to a terminal\n\nTo get started, install `mup` (meteor-up)  \n**mup** allows you to deploy your meteor apps to any server and anywhere, it runs on a docker container\n\n`npm install --global mup` or `yarn add global mup`\n\nThe above command will install `mup` globally, and it will allow you to access it anywhere in your terminal.  \nnext run the following command\n\n`mup init`\n\nThe above will initialize the meteor up for your project, make sure you are inside SparkEd  \nit creates a directory called `.deploy` which contains 2 files `mup.js` and `settings.json`\n\n```bash\n├── .deploy\n│   └── mup.js\n    └── settings.json\n```\n\nThe `mup.js` file is the one you will want to pay attention to, it contains the server information you will need to update as required\n\n```Javascript\n\n  servers: {\n    one: {\n      host: '', // change this to the server address\n      username: '', // username of the server\n      password: '', // password for the username above\n      // pem: './path/to/pem', // in case you are using an ssh key\n    },\n  },\n\n   app: {\n   name: 'SparkEd',  // name of the app is SparkEd\n   path: '../', // Specify the location of the app, used ../ because we are in .deploy directory\n   env: {\n   \tROOT_URL: '', // this is server address of where you are deploying to, it can be a local IP of the server you are deploying to\n   \tMONGO_URL: 'mongodb://mongodb/meteor',\n   \tMONGO_OPLOG_URL: 'mongodb://mongodb/local',\n   },\n```\n\nDouble check to make sure that your details are correct, if something doesn't work, kindly create an issue to let us know  \nrun the following command to get the setup meteor up\n\n`mup setup`\n\nThe above command might take a while, make sure you have a good internet and just wait for it, when it is done run the following command\n\n`mup deploy`\n\nThe above command will deploy SparkEd on the specified server address\n\nMake sure you read more info [here](http://meteor-up.com) on meteor-up\n\n### Docker\n\nTo run the current image built\n\n`docker pull olivierjm/spark`\n\nand run it as specified [here](#running-the-image)\n\n#### Build an image\n\nYou can build a docker image in 2 ways\n\n- You can use the provided `launchpad.conf` file\n\n      `docker build -t yourname/sparked:tag .`\n\n- You can use build args to pass args when building the image\n\n  ```bash\n  docker build \\\n  --build-arg APT_GET_INSTALL=\"curl git wget\" \\\n  --build-arg INSTALL_MONGO=true \\\n  --build-arg NODE_VERSION=8.11.4 \\\n  -t yourname/sparked:tag .\n\n  ```\n\n  The above will install mongodb and meteor will use that instance to run but If you are building for production it is best to use an external mongodb, you provide a url when run the built image.\n\n#### Running the image\n\nIn the normal way you would run the image as follows\n\n`docker run imagename:tag`\n\nbut we need to provide environment vairables that meteor can pick up and use like **_ROOT_URL_**, **_PORT_**, **_MONGO_URL_** and any other envs that you might want to pass along.\n\nIf you are using an external mongodb then you can provide the link to connect to when running the image.\n\n```bash\n  docker run -d \\\n  -e ROOT_URL=http://your_url \\\n  -e MONGO_URL=mongodb://url:dbname \\\n  -e MONGO_OPLOG_URL=mongodb://oplog_url \\\n  -p 80:3000 \\\n  yourname/sparked:tag\n```\n\nIf you set `INSTALL_MONGO` to true when building the image or in the `launchpad.conf` then you don't need to set the _MONGO_URL_\n\n```bash\n  docker run -d \\\n  -e ROOT_URL=http://your_url \\\n  -p 80:3000 \\\n  yourname/sparked:tag\n```\n\ncheck `http://your_url` in your browser if the image run successfully then you should be able to have everything workin.\n\n### Issues\n\nCheck [here](https://github.com/SparkEdUAB/SparkEd/issues) for issues, urgent issues that need attention are pinned on top of other issues. feel free to file an issue if you are experiencing a problem or dive in the existing ones to contribute.\n\n### Contributors\n\nWe acknowledge contributors who added value to this project in any way.\n\n\u003ca href=\"https://github.com/olivierjm\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/11255454?s=460\u0026v=4\" title=\"olivierjm\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/Big-Zude\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/40924941?s=460\u0026v=4\" title=\"Big-Zude\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/kazashim\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/12492093?s=460\u0026v=4\" title=\"kazashim\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/marieram\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/34839209?s=400\u0026v=4\" title=\"marieram\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/supedplc\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/26572527?s=460\u0026v=4\" title=\"supedplc\" width=\"80\" height=\"80\"\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSparkEdUAB%2Fsparked-legacy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSparkEdUAB%2Fsparked-legacy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSparkEdUAB%2Fsparked-legacy/lists"}