A hybrid mobile-web app of community contacts built using react.js, tabletop.js and powered by Google Sheets. https://savbook.io
SavBook aims to serve as a one-stop resource for social service data and resources in Greater Savannah, working toward what Greg Bloom has called an "Open Data Approach to the Human Service Directory Problem" (2015).
Community Partner: Coastal Georgia Indicators Coalition.
CityBook emphasizes simplicity and flexibility over adherence to a data standard. You can add any columns with any title to your CityBook spreadsheet and they will displayed. However, some column names are required or receive special treatment:
Displayed as an <h1>
element. It corresponds to the main title of your entry.
Displayed as a button that users can click or tap to launch a call. Cells should contain a single telephone number. Most mobile telephone applications are flexible in how they parse a phone number, so these may use any common telephone format (e.g. 123-456-7890, (123)456-7890, 1234567890, etc.).
Displayed as a button that launches Google Maps directions to the location in the cell. It's a good idea to test the addresses you enter by searching for them in Google Maps. If your address is incomplete or does not return a result, the user may have difficulty finding the right location.
All other data types are displayed in the "Show Details" section. The column header will appear as bold text with a colon (i.e. a Key-Value format).
git clone https://github.com/codeforamerica/citybook.git
cd citybook
npm install
Create a PostgreSQL databse named citybook, or edit the development block of config/config.js
to the name of your database. Consider using http://postgresapp.com/.
psql
CREATE DATABASE citybook;
\q
node_modules/.bin/sequelize db:migrate
Running in development mode enables WebpackDevServer hot-module-reloading on port 3000. Use port 8080 for testing back-end functionality.
npm run dev
Bundles everything into bundle.js.
webpack
npm start
git remote add production https://git.heroku.com/citybook.git
(Open an issue to be added as a collaborator on heroku)
Make your changes, then run:
node_modules/.bin/sequelize db:migrate
This project uses Tabletop.js for the spreadsheet access, Handlebars for some templating, List.js for the searchable list, and Bootstrap for the styles.
The instruction page template was generated by using the Cayman theme by Jason Long.