Technovation is a global tech education nonprofit that empowers girls to become leaders, creators and problem-solvers.
We use BrowserStack to test for cross-browser compatibility so that we can support a worldwide community of volunteers!
Install homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Install asdf, ruby 3.1.2, nodejs
brew install asdf
asdf plugin-add ruby
asdf plugin-add nodejs
asdf install ruby 3.1.2
asdf install nodejs <latest-version>
Make sure XCode is installed.
Under Xcode preferences locations, make sure there is a version set.
Install redis (follow the post-install instructions)
brew install redis
Install postgresql (follow the post-install instructions)
brew install postgresql
createuser -s postgres
Install imagemagick
brew install imagemagick
Install pdftk
https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk_server-2.02-mac_osx-10.11-setup.pkg
Install wkhtmltopdf
Install as appropriate for your environment, and make sure to set WKHTMLTOPDF_PATH in your .env file to point to the tool.
git clone git@github.com:Iridescent-CM/technovation-app.git
For the most up-to-date ENV settings, copy them from the Heroku QA envirnoment.
Switch to ruby 3.1.2 (this creates the .tool-versions file and you won't have to do it again)
Switch to nodejs
asdf local ruby 3.1.2
asdf local nodejs <latest-version>
Run the rails setup file
./bin/setup
Ensure the test suite can run without errors:
rake
Run the local server
rails s
Navigate to http://localhost:3000
To compile and hot reload assets, run the following in a new terminal window
./bin/shakapacker-dev-server
You can run the app with Docker Compose instead of installing Ruby, Node, Postgres, and Redis locally. The stack uses Dockerfile at the repo root and docker-compose.yml.
| Service | Role |
|---|---|
web |
Rails server on port 3000 (source mounted from your machine) |
worker |
Sidekiq (default and mailers queues) |
postgres |
PostgreSQL 14; user/password postgres / postgres |
redis |
Redis 7 |
Compose sets DATABASE_URL, REDIS_URL, RAILS_ENV, RACK_ENV, and WKHTMLTOPDF_PATH for the app containers. You still need a .env file in the project root for other secrets and config (same as the native setup above).
- Docker with Compose (v2:
docker compose).
-
Clone the repo and place
.envin the project root. -
Build and start everything:
docker compose up --build -
In another terminal, prepare the database (migrations, etc.) once:
docker compose exec web bundle exec rails db:prepareAdd seed data if your team uses it:
docker compose exec web bundle exec rails db:seed
Open http://localhost:3000. Postgres is also published on 5432 and Redis on 6379 on localhost if you need them from tools outside Docker.
- Base image: Ruby 3.4.9 (slim), aligned with the
GemfileRuby version. - Node 26 and Yarn for the front end;
bundle installandyarn installrun at build time. - System packages include build tools,
libpq, ImageMagick,pdftk-java, wkhtmltopdf (amd64/arm64), and libraries used by native gems (e.g. node-canvas). - Default image command (without Compose overriding it) runs
rails db:preparethenrails son0.0.0.0:3000. Ports 3000 and 3035 are declared for the app and Webpack dev server.
webmounts the repo at/appwith a named volume for Bundler (bundle) and another fornode_modulesso installs persist between runs.workeruses the same image and volumes and connects to the same DB and Redis.postgresuses a healthcheck sowebandworkerstart after the DB is ready.
For Webpack dev server with hot reload, run it inside the web container and publish port 3035 (add 3035:3035 under web.ports in docker-compose.yml if it is not already there), then:
docker compose exec web ./bin/shakapacker-dev-server -b 0.0.0.0
.dockerignore keeps .env and other local files out of the image build context so secrets are not baked into layers. With Compose, your working tree is still bind-mounted into /app, so the app reads .env from the host at runtime.
Seeded users:
-
Student
- username: student@student.com
- password: student@student.com
-
Mentor
- username: mentor@mentor.com
- password: mentor@mentor.com
-
Judge
- username: judge@judge.com
- password: judge@judge.com
-
Chapter Ambassador
- username: chapter-ambassador@chapter-ambassador.com
- password: chapter-ambassador@chapter-ambassador.com
-
Admin
- username: admin@admin.com
- password: admin@admin.com
- Login as the admin
- Go to "Content & Settings"
- Toggle what you need on or off
Technovation uses RSpec, and you can run the entire test suite just by entering the command rake
rake
Plain JS modules and Vue components are tested with Vitest and @vue/test-utils (Vue 2 line). Tests live in spec/javascript/, mirroring the structure of app/javascript/.
yarn test # run once (CI mode)
yarn test:watch # watch mode for local developmentThe test tooling is intentionally pinned to Vue 2.6-compatible versions (vitest@0.34.6, vite@4, vite-plugin-vue2) as devDependencies only — production dependencies (including vue@2.6.11) are unchanged.
Current coverage focuses on critical-path business logic:
- Age/division cutoff helpers (
utilities/age-helpers) - Judge scoring completeness rules (Vuex getters/actions)
- Registration readiness and profile validation (Vuex getters)
- Key Vue components:
ScoreEntry,QuestionSection,BasicProfile,LocationForm
JS unit tests run in CircleCI on parallel node 0, after ESLint and before the database setup step.
