qit: Listen to Programming Podcasts by Topic
qit...get it? get it? Like...Queue I.T.!
Ok so yeah, the title needs work, but the idea is to let programmers find and listen to podcasts by topic.
Check out a preview here: https://qit.cloud
Running the website
The website is a Progressive Web App built on ReactJs that uses styled components.
Note: this branch is currently running off of Elasticsearch, so things are going to be bumpy for a bit!
NEW Before you run this program
Since we are improving a lot of the features, the most simple way to get the app to work is to download and install Docker on your machine. This only needs done once, and is the best way to enjoy all of the options. The specifics for the software are on the pages, and should be simple to follow.
If you do not work in the software field, simply installing the program correctly should be enough to allow you to run the local version.
Installation Instructions
If your system does not support docker
You will need to download and install Ruby and Postgre. Warning! No further instruction exist at this time for this method.
Running locally:
- Create a fork of the qit repo.
- Clone forked repo.
- Run following commands in the command line of your choice:
# Only have to do this once node bin/setup.js docker-compose up -d cd SearchIndexer dotnet ./App/bin/Debug/netcoreapp2.2/App.dll create-index -e "http://localhost:9200" -n podcasts -f Examples/elastic-podcast-index-definition.json -u elastic -p QITROCKS! dotnet ./App/bin/Debug/netcoreapp2.2/App.dll update-documents -f Examples/podcast-feeds.json -e "http://localhost:9200" -n podcasts -u elastic -p QITROCKS! # Setup front-end cd ../website npm start
That's it! Now you're ready to use the site locally and everything should be functional.
Running in production:
Well, that's a bit complicated right now. The website is in netlify, the API is hosted in linode, the search engine, the podcast-feed-loader is a scheduled serverless function, the proxy is in heroku, and the db is in elephantsql. Phew!
More on how to get this setup...later.
As for what settings are available to you, there are a bunch of env variables to know about. Everything works with the defaults, but these provide greater control and optional features. Check out .env.example for defaults
These are available for the site:
Website
REACT_APP_BASE_SEARCH_URL REACT_APP_BASE_API_URL REACT_APP_CORS_PROXY REACT_APP_MAX_SEARCH_RESULTS REACT_APP_SEARCH_API_KEY REACT_APP_PLAYBACK_RATES REACT_APP_AIRBRAKE_PROJECTID REACT_APP_AIRBRAKE_PROJECTKEY
API
You can see what is available for the api in the qit-api/production-setup/.env file
Podcast Feed Loader
Check out the podcast-feed-loader project for a listing there.
Linting the React website
This website uses the Standard style guide, you can run the linter with the command below but we'll also zap you with a pre-commit hook before you check any semi-colon in.
E2E the React website
With the Dev Server running
To run cypress interactive mode, run the following commands:
cd website npm run cypress:open <click run all tests on the GUI>
To run cypress headless mode, run the following commands:
cd website
npm run cypress:runWithout the Dev Server running
cd website
npm run local:e2eSpin docker containers
Go to desired folder.
# test docker enviroment bindings before creating containers
docker-compose config
# start local development
docker-compose -f docker-compose.yml -f docker-compose.local.yml up -d
# start regular docker
docker-compose build && docker-compose up [ OPTIONAL ] -d (if console is not needed)
# to start specific service
docker-compose -f docker-compose.yml up -d website (or any other service name from docker-compose)
Command to stop container:
# to stop containers
docker-compose stop
How can I add a new podcast?
The search engine gets populated via a different github project, the QIT Podcast Feed Loader project.
Contributors
Huge thank you to everybody that has worked on this project!
Elasticsearch switch over TODO
- Dockerize the SearchIndexer
- Fix Cypress
- Make local dev easier by "npm run" so you can edit the files in docker
- Change the getting started directions to just be "docker-compose up -d"
- Get the production updates squared away