Giter Site home page Giter Site logo

flatsheet's Introduction

flatsheet

A realtime editor for curating data as a team. flatsheet.io

Join the chat at https://gitter.im/flatsheet/flatsheet

Current status

This version of Flatsheet is an in-progress rewrite using Node.js. The first version of Flatsheet was a Ruby on Rails prototype.

Many aspects of the project are incomplete, but things are far enough along that it will be useful if you want to install it and experiment in a development environment.

Want to see an early demo of the real-time editor? Go here: http://flatsheet-realtime.herokuapp.com/

Todos:

Open issues represent current todo list: github.com/flatsheet/flatsheet/issues

Getting started

There are two ways to get flatsheet running:

Option 1: clone the flatsheet repository

Cloning the repo is best for testing things out & developing flatsheet, but works fine for other purposes. You just have to be prepared to manually pull & merge changes to your server.

Steps:

Option 2: use flatsheet as an npm dependency

This is a good option for when you're using flatsheet in production, because you can make use of npm to install and update flatsheet.

Steps:

  • Create a directory name flatsheet for your project (or whatever you like)
  • Change directory cd flatsheet
  • Create a package.json file with npm init
  • Install flatsheet with npm: npm install flatsheet --save
  • Install the response module: npm install response --save

File/folder setup

  • Create a folder named data: mkdir data
  • Create a app.js file with this code:
var server = require('flatsheet')({
  site: {
    title: 'flatsheet',
    email: '[email protected]',
    url: 'http://127.0.0.1:3333',
    contact: 'your full name'
  },
  db: __dirname + '/data'
});

server.listen();
  • Create a .env file for secret config like sendgrid username/password:
SENDGRID_USER=yourusername
SENDGRID_PASS=yourpassword
  • Add a flatsheet script and a start script to the scripts field in your package.json file:
"scripts": {
  "flatsheet": "flatsheet",
  "start": "node app.js"
},
  • So your full package.json file should look something like this:
{
  "name": "flatsheet-example",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "flatsheet": "flatsheet",
    "start": "node app.js"
  },
  "author": "",
  "license": "ISC"
}
  • next create an admin user:

Create an admin user

  • Create an admin account by running npm run flatsheet accounts create-admin. You'll be prompted for email, username, & password.
  • You can run npm run flatsheet accounts list to see that your admin account was created.

Start the server

  • Now run npm start to start the server.
  • In development you can watch the css & js using npm run watch.
  • In development you can debug runnig npm run-script debug. You add breakpoints in the code with debugger
  • Go to http://127.0.0.1:3333 and log in with the admin account credentials.

Create a sheet

  • Log in
  • Click the New blank sheet button
  • Fill out the name and description

Invite users

  • Navigate to http://127.0.0.1:3333/accounts/invite
  • Enter email addresses, one address per line
  • Click "Send invitation"
  • Users will receive an email with a link they can click to create accounts

Support

This project is supported in part by a code sprint grant from OpenNews.

More info at the Flatsheet blog.

License

MIT

flatsheet's People

Contributors

sethvincent avatar akamaozu avatar jmm avatar gabelula avatar frewsxcv avatar mapsam avatar gitter-badger avatar

Stargazers

frankfanslc avatar  avatar  avatar Nick Bush avatar vulcangz avatar Katherine Goforth avatar  avatar Guo Jia avatar Robin de Mourat avatar Alejo Benjamín avatar  avatar Sean Wilson avatar Hai Nguyen avatar  avatar Travis Taylor avatar Reuben Cummings avatar Dustin Metcalf avatar Mark Gustie avatar Sota Yamaguchi avatar Steve Ottoz avatar Reinaldo Granado avatar  avatar JM Versteeg avatar Jonathan M. Hethey avatar  avatar Wilson M. de N. Canda avatar Jan avatar Tim Wisniewski avatar Chase Pettit avatar Zoe LeBlanc avatar Liu Yi avatar Tikhon Bernstam avatar Angus H. avatar Dan Gautsch avatar Benoit Pohl avatar Timothy Lee avatar Chia-liang Kao avatar LY Cheng avatar Johnny Kane avatar Erich Ocean avatar  avatar jon ⚝ avatar rae avatar Steve Knoblock avatar RK Aranas avatar Daniel Cloud avatar Chafic Najjar avatar Joe Hand avatar Michael Anthony avatar timelyportfolio avatar vlspopov avatar Rob McCardle avatar John Montgomery avatar Jure Triglav avatar Aaron Glover avatar Josh Johnston avatar Dmitriy Plekhanov avatar Ryan Cooper avatar Florian Schmidt avatar Matias Doyle avatar  avatar Jerzerak avatar  avatar Adrian Shum avatar Mladen Krivaćević avatar Michael Raguse avatar Gordon Buhler avatar Philippe Dionne avatar Bastien Chatelard avatar Luka Vidaković avatar Anand Thakker avatar  avatar Josh Duff avatar Yuya Saito avatar Gocho Mugo avatar Trey Tacon avatar Augustus Yuan avatar Albert Decatur avatar Gabriel Corado avatar Bertrand Marron avatar MO avatar Frank Dou avatar Prabhanjana Kumar C avatar 6 avatar ZOU Bin avatar Rikki Schulte avatar dap avatar David Merrique avatar Yao avatar Emanuel Feld avatar Andrew Sullivan avatar Stefano avatar Aram Zadikian avatar Eric Brelsford avatar Devin Clark avatar Igor Rafael avatar Brent Doll avatar Trevor Gerhardt avatar Tom MacWright avatar Chris Hart avatar

Watchers

Ryan Pitts avatar ThomasWersinger avatar James Cloos avatar  avatar Bobbie Tables avatar  avatar Michael Anthony avatar Philip House avatar (◕ᴥ◕) avatar  avatar Kalin Maldzhanski avatar Khaled avatar Christina Montilla avatar

flatsheet's Issues

reorder rows & columns

  • reorder rows via drag & drop
  • make sorting sync with other users
  • reorder columns via drag & drop
  • improve styles / add something to grab to the columns

import csv/json files through UI

There's a way to create a new sheet on the command-line based on a json file with an array of objects, but there needs to be a way to do this through the UI.

Use dat

Currently flatsheet is using leveldb to store sheets. I'd like to use dat.

flatsheet can act as a way for a team to edit their data together in realtime and also make use of the awesome push/pull functionality of dat.

In addition, flatsheet would build on top of dat's versioning to create a UI for tracking and reverting changes to a dataset.

Currently this may mean creating a dat instance for each sheet (see dat issue about serving multiple repositories from one server: dat-ecosystem/dat#41), possibly using something like https://github.com/substack/dataplex to expose each instance.

Make PaaS-friendly

Howdy again!
Have gotten the server running great (flatsheet/editor is another story), though am wanting to push it to my team's shiny new Deis install, which is really similar to how Heroku does things.

I've tried creating a Procfile with the following:

web: npm start

...But am getting error 500 on Deis, even though it seems to be running. Heroku is quite a bit more descriptive:

2014-09-08T13:40:05.496194+00:00 app[web.1]: > [email protected] start /app
2014-09-08T13:40:05.496176+00:00 app[web.1]: 
2014-09-08T13:40:05.496197+00:00 app[web.1]: > nodemon --watch public --watch server.js --watch index.js index.js
2014-09-08T13:40:05.496198+00:00 app[web.1]: 
2014-09-08T13:40:06.423700+00:00 app[web.1]: 8 Sep 13:40:06 - [nodemon] v1.2.1
2014-09-08T13:40:06.425993+00:00 app[web.1]: 8 Sep 13:40:06 - [nodemon] watching: /app/public/**/* server.js index.js
2014-09-08T13:40:06.425640+00:00 app[web.1]: 8 Sep 13:40:06 - [nodemon] to restart at any time, enter `rs`
2014-09-08T13:40:06.426483+00:00 app[web.1]: 8 Sep 13:40:06 - [nodemon] starting `node index.js`
2014-09-08T13:40:08.914750+00:00 app[web.1]: server started at 127.0.0.1:3333
2014-09-08T13:40:50.016144+00:00 heroku[router]: at=error code=H20 desc="App boot timeout" method=GET path="/" host=times-flatsheet.herokuapp.com request_id=e67f5f20-0848-4c5d-b96f-c0b681d4e95d fwd="143.252.1.30" dyno= connect= service= status=503 bytes=
2014-09-08T13:41:03.877516+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2014-09-08T13:41:03.877825+00:00 heroku[web.1]: Stopping process with SIGKILL
2014-09-08T13:41:04.736082+00:00 heroku[web.1]: State changed from starting to crashed
2014-09-08T13:41:07.087540+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=times-flatsheet.herokuapp.com request_id=36a018ca-574e-4265-a4c8-74def127ce83 fwd="143.252.1.30" dyno= connect= service= status=503 bytes=
2014-09-08T13:41:07.533782+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=times-flatsheet.herokuapp.com request_id=1f7d0dd3-1e7b-4e67-ad58-493fabf851bb fwd="143.252.1.30" dyno= connect= service= status=503 bytes=

...Seems like the biggest issue is that the port number is explicitly bound to 3333, Heroku generally sets port number via an env var; if you change your listen function to resemble:

.listen(process.env.PORT || 3333)

...You'll probably be well on your way. I don't know whether the port is hard-coded anywhere else, though.

Getting this workable on Heroku at least would be a really useful thing, given simple PaaS deployments of web-based tools is quite common.

Edit: Changing the listen stanza and adding a Procfile totally makes everything work on Heroku. Will do a PR shortly.

allow resetting a password

usual flow of:

  • user requests a password reset
  • site sends password reset email with link
  • form at link allows user to set new password

Master branch is broken

Updated my master branch after the last merge but it's broken. It deleted all my public files, which was expected.

What was unexpected was running npm run build didn't regenerate the files in the public folder.

I tried using npm run watch to build, but I could only get public/sheet.js.

Unfortunately I made the pull directly to my master branch, so I'll try to clean it up and religiously pull into a separate branch and merge when all systems are go.

distribute on npm

I already used the flatsheet name for the API client.

But maybe this repo can be distributed as flatsheet-server?

People will be more likely to need to install the flatsheet API client, so I think this makes sense.

Improve design

  • Create main navigation
  • Improve front page, add information
  • Fix non-table form inputs
  • Make log in/out buttons appear at appropriate times
  • Make scrolling around on the sheet edit/view pages look better
  • /sheet/view/:id looks bad. fix that.
  • /account/invite needs help text and better form styles
  • make the footer not wonky
  • make sheet list easier to read

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.