- Overview
- Inspirations
- Installation and Usage
- Testing
- Deploy (not recommended yet)
- Troubleshooting
- Changelog
- Core Contributors
- Resources
- Contributing
- License
BrigadeHub is an alpha stage data portal for Code for America Brigades. It's being built to consolidate the efforts of maintaining a brigade's information into a single location, to distribute the task of content creation across the various non-technical brigade roles, and to enhance the experience of both members and admins of local volunteer brigades.
brigadehub, while deployed for Code for San Francisco, has not yet been optimized for wide adoption yet. If you deploy this to your production brigade site, you do so at your own risk.
For a complete top-down view of the roadmap, take a look at our active Roadmap Wiki
In short, BrigadeHub is designed to meet some very specific goals:
- Be the external face for the brigade
- Show Leadership / Contact info / member bios
- Brigade Blogging
- Show upcoming events and calendars through Meetup and Google Calendar API integration
- Give new users a place to onboard through tight integration with Github oauth and expandable API integrations
- Display and market active projects through Github API integration
- Allow non-developers to update website info at-will
- Allow developers to hack and customize as desired
- Allow brigades to launch with a single non-dev step to their own environment (most likely Heroku)
- Allow brigades to communicate with each other more effectively
This project is originally based on sahat/hackathon-starter, but the codebase has been heavily modified to meet our needs. We're striving to match feross/standard javascript styling, though the original boilerplate didn't conform to that, so it's a wip.
Similar projects have been conceived and implemented previously, most prominently by CodeForPhilly in the form of Laddr. The reason we're building a parallel system is for a few reasons:
- a system that isn't based in PHP, and didn't require a custom Linux VM to run
- to utilize the cross-discipline talents of Node.js developers, who generally can move from front-back end quickly
- a one-click deploy system, preferably to Heroku, that would make deployment of a new hub effortless
- a platform tightly coupled with the Github API, for oauth, handling permissioning and adminning of the github repos easily
- a system that easily lent itself to additional onboarding steps for new members.
Another project which this is pulling inspiration from is CodeForAtlanta's Connector. Chime was also a CMS that had similar goals, but focused on local governments, rather than brigades.
There are two methods of install at the moment: via cloning the source repo or docker. The prerequisites for each change depending on which you choose to use.
- Command Line Tools
- Mac OS X:
- Windows: Visual Studio
- Ubuntu / Linux Mint:
sudo apt-get install build-essential
- Fedora:
sudo dnf groupinstall "Development Tools"
- OpenSUSE:
sudo zypper install --type pattern devel_basis
- MongoDB
- Mac OS X:
brew install mongodb
- run by typing in
mongod
- If you get a permissions error when running, you may need to make additional changes to your system post install:
- type in
whoami
and note the username of the computer you're working on sudo mkdir /data /data/db
sudo chown USERNAME:staff /data /data/db
- You should be able to now run
mongod
without a permissions error.
- type in
- Mac OS X:
- Node.js v4+
- Standard Install
- Download the binary from the Node.js website that corresponds to your system
- Follow the accompanying installation instructions to install
- via NVM
- *NVM gives you the a few extra nice-to-haves that makes development in Node a lot easier:
- User Sandboxing
- No need for
sudo
- Ability to run parallel versions of Node separate from each other
- Uninstall any previously installed Node versions (if you don't already have
nvm
installed) - Install NVM using the script found on the nvm repo), or the following:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash && echo 'export NVM_DIR="$HOME/.nvm"' >> $HOME/.bashrc && echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm' >> $HOME/.bashrc && . $HOME/.bashrc && nvm install 6 && nvm alias default 6 && nvm use 6
- *NVM gives you the a few extra nice-to-haves that makes development in Node a lot easier:
- Standard Install
Note: If you are new to Node or Express, I recommend to watch Node.js and Express 101 screencast by Alex Ford that teaches Node and Express from scratch. Alternatively, here is another great tutorial for complete beginners - Getting Started With Node.js, Express, MongoDB.
# Get the latest snapshot
git clone https://github.com/brigadehub/brigadehub.git
# Change directory
cd brigadehub
# Install NPM dependencies
npm install
# Copy the .env variables to your own file
cp .env.example .env
# If needed, start mongodb in a separate tab
mongod
To run the server in production, run:
npm start
or if starting for local development:
npm run develop
Simply run the following:
docker-compose up
This will build up a docker app and a dockerized mongodb and connect the two together. The docker compose file also runs nodemon, which will also listen to changes in your code and redeploy those changes in your docker container.
For details on our linting / js coding style, visit `feross/standard'. Linting occurs automatically on commit, but you can run it manually by running:
npm run lint
Unit tests are being run via tap
. Any file with the *.tap.js
naming scheme will be run in unit tests. We are sorely lacking on unit testing, so anyone willing to take these on are very welcome. Unit tests are run automatically on commit, but you can run them manually anytime by running:
npm run test:unit
To run linting and unit tests together, you can run npm test
.
For end-to-end testing, we are using a Selenium standalone server, PhantomJS headless browser, and Nightwatch. Since end to end tests involve testing all aspects of the application, including UI interactions, all three of these services need to be running simultaneously to the development server.
npm run selenium:install
When you are ready to run e2e tests, you'll need to run the following commands in separate terminals:
npm run selenium:start
npm run develop
npm run test:e2e
To stop the selenium server after the tests, run npm run selenium:stop
.
If for some reason, you need to stop the selenium server
npm selenium:stop
brigadehub, while deployed for Code for San Francisco, has not yet been optimized for wide adoption yet. If you deploy this to your production brigade site, you do so at your own risk.
If you are outside Code for San Francisco and you want to get a version of brigadehub up for your brigade, fork brigadehub/brigadehub into your own brigade's organization. Updates should be done using upstream fetches. Contributing back should be done via Pull Request back to this repository :)
These instructions will be updated as the project emerges from the Alpha-release haze :P
Using a SCM client with Mac OS
There are issues, because of the way Mac OS and Node work together, or don't. Here's an example of people having problems
The most effective way of solving this, besides learning how to use the git CLI, would be to create an alias in your .bash_profile
Something like this
ghdc="open Applications/GitHub\ Desktop.app/Contents/MacOS/GitHub\ Desktop"
And instead of opening your client from an alias in applications
- open a terminal,
- cd to the brigadehubhub repo root
- run your alias
To see what has changed in recent versions of brigadehub, see the CHANGELOG.
- Oz Haven - Project Lead - (@therebelrobot) <
github``@``therebelrobot.com
> - Todd Seller - Project Co-Lead - @toddseller
- Aaron Schachter @aaronschachter
- Andrew Bacon @andrewmbacon
- David Carvel @davidcarvel
- David Hincapie @davidhincapie
- Deborah @deborahahn
- Debbie Espino @despino
- Gisela @GiselaKay
- Leo Lau @hawflau
- Jason Durant @jaydurant
- John Naulty Jr. @jnaulty
- John Gluck @johngluck65
- Jesse Szwedko [@jszwedko Owner](https://github.com/jszwedko Owner)
- Jessica Parsons @verythorough
- Judy5000 [@Judy5000 Owner](https://github.com/Judy5000 Owner)
- Justin @Juxtaposeidon
- kanagha @kanagha
- Kevin Litchfield @kevinlitchfield
- Maja Bogeski @majabogeski
- Neri J. Jakubowski Junior @nerijunior
- Patrick Connolly @patcon
- Phips Peter @pspeter3
- @rogeliobonilla
- Tracy @spiffysparrow
- @Thithi32
- @whatdoublechen
- @wrendo
will be adding resources soon
Feel free to chat with the brigadehub core team (and many other users) on brigadehub
Slack in the #brigadehub
channel (join here), on IRC in the #brigadehub channel on Freenode, or via opening a new Github Issue here in the repo.
Refer to our CONTRIBUTING.md
doc.
This can be found in brigadehub's wiki as well.