{"id":19780470,"url":"https://github.com/cbetta/flow2","last_synced_at":"2026-03-03T23:03:03.787Z","repository":{"id":16739545,"uuid":"70800418","full_name":"cbetta/flow2","owner":"cbetta","description":"A simple, in-progress multi-user blog/community system","archived":false,"fork":false,"pushed_at":"2023-01-19T08:27:18.000Z","size":154,"stargazers_count":3,"open_issues_count":7,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-02-15T06:17:42.551Z","etag":null,"topics":["news","news-aggregator","rails","ruby"],"latest_commit_sha":null,"homepage":"http://rubyflow.com/","language":"Ruby","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cbetta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-13T11:38:14.000Z","updated_at":"2020-02-16T22:08:06.000Z","dependencies_parsed_at":"2023-02-10T21:30:23.180Z","dependency_job_id":null,"html_url":"https://github.com/cbetta/flow2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cbetta/flow2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbetta%2Fflow2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbetta%2Fflow2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbetta%2Fflow2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbetta%2Fflow2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cbetta","download_url":"https://codeload.github.com/cbetta/flow2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cbetta%2Fflow2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30064795,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T18:21:05.932Z","status":"ssl_error","status_checked_at":"2026-03-03T18:20:59.341Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["news","news-aggregator","rails","ruby"],"created_at":"2024-11-12T05:39:54.322Z","updated_at":"2026-03-03T23:03:03.771Z","avatar_url":"https://github.com/cbetta.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# flow2\n\nA simple blogging / linklogging tool for communities. Used to run http://rubyflow.com/\n\n## Features:\n\n* Admin user can delete any comment or edit/delete any post\n* Optimized for running on Heroku\n\n## Dependencies\n\nYou need to have these things:\n\n* Ruby 2.3\n* Postgres (9.3 fine for now)\n* an account at Twitter, GitHub, or Facebook to create an 'app' for OAuth usage there\n* Redis (you *can* run without it but you'll get no rate limiting or caching)\n\nIn production, use Heroku plus their Postgres service and the Redis Cloud service. You can run a simple flow2 install entirely for free this way but then have the option to scale up in future.\n\n## Development / local use\n\nSetting up .env is the longest piece of the puzzle, but once it's set up, you're good. First, you need to specify your app's root URL:\n\n    BASE_URL=http://localhost:5000\n\nAnd give your site a name and description:\n\n    SITE_NAME=RubyFlow\n    SITE_DESCRIPTION=The Ruby and Rails community linklog\n\nYou'll need to specify your local Postgres' database URL like so:\n\n    DATABASE_URL=postgres://flow2:flow2@localhost/flow2\n\nIf your Redis instance is on localhost at the default port, you don't need to do anything else, otherwise .env will require an entry like this:\n\n    REDIS_URL=redis://localhost:6379\n\nYou would also do well to have an S3 bucket set up (for user avatars). It's not a strict requirement though. If you do set it up, you'll need these entries in .env:\n\n    AWS_ACCESS_KEY_ID=... etc.\n    AWS_SECRET_ACCESS_KEY=... etc.\n    AWS_BUCKET=your-bucket-name-here\n\nYou'll also need to create an 'application' for OAuth / authentication purposes over at either GitHub, Twitter or Facebook (for now) then enter the keys into .env like so:\n\n    OAUTH_PROVIDER_KEY=...\n    OAUTH_PROVIDER_SECRET=...\n    AUTH_PROVIDER=GitHub\n\nAnd to finally run the app:\n\n    foreman start\n\n## Deployment to production\n\nflow2 has been optimized to deploy well on Heroku. You can deploy it elsewhere, but you'll need to figure out the details.\n\nFor Heroku, you'll need to repeat a lot of the .env process from the development setup (above) but using `heroku config:set` instead.\n\nThings to consider:\n\n* Use Heroku's Postgres service and they'll populate `DATABASE_URL` for you, so that's easy.\n\n* Use the Redis Cloud add on and you'll get a 25MB Redis instance for free! It'll auto-populate the `REDISCLOUD_URL` variable too, which this apps detects automatically.\n\n* You'll need a separate OAuth setup (with key and secret) from GitHub, Twitter or Facebook, etc.\n\n### The actual process\n\nDeploying on Heroku is pretty easy.\n\n    git clone git@github.com:peterc/flow2.git yourflow\n    cd yourflow\n    heroku apps:create yourflow\n    heroku addons:add heroku-postgresql:hobby-dev\n    heroku addons:add rediscloud\n    heroku config:set RACK_ENV=production\n    heroku config:set AUTH_PROVIDER=GitHub OAUTH_PROVIDER_KEY=... OAUTH_PROVIDER_SECRET=...\n    heroku config:set BASE_URL=http://yourflow.herokuapp.com/\n    git push heroku master\n    heroku open\n\n*Note: Be sure to replace `yourflow` with a more specific name for your own site ;-)*\n\nTo get access to the console (such as to set other settings):\n\n    heroku run rake console\n\nOther rake tasks include `reset_redis` and `reset_db` - use both with caution.\n\n### Customizing your site\n\nSome customizations occur via the environment variables.\n\nIf you have a 'kit' ID from Typekit you can use, for example:\n\n    TYPEKIT_ID=abcdefg\n\nBut most customizations occur via a 'config' system within the app. This is currently managed through the console (although a Web interface is possible long term):\n\n    heroku run rake console\n\nThen, for example:\n\n    Config[:site_name] = \"YourSite\"\n    Config[:site_description] = \"A place to call your own\"\n    Config[:twitter_username] = \"youraccount\"\n    Config[:stylesheets] = \"http://...\"\n    Config[:stylesheets] = [\"http://...\", \"http://...\"]\n    Config[:cookie_key] = \"yoursite.session\"\n    Config[:cookie_timeout] = 86400 * 365\n    Config[:theme_color] = \"#099\"\n    Config[:text_color] = \"#222\"\n    Config[:background_color] = \"white\"\n    Config[:header_background_color] = \"#0cc\"\n    Config[:fonts] = \"'Open Sans', 'Helvetica Neue', arial, sans-serif\"\n    Config[:header_fonts] = \"Futura, Helvetica, sans-serif\"\n    Config[:font_size] = \"14px\"\n    Config[:comment_max_length] = 1000\n    Config[:comment_allowed_elements] = %w{a em strong p}\n    Config[:username_min_length] = 3\n    Config[:username_max_length] = 20\n    Config[:inner_width] = \"960px\"\n    Config[:avatar_size] = \"64px\"\n\n\nThen:\n\n    heroku restart\n\nHowever, you'll note that certain things still don't take effect. This is because the assets need to be recompiled for any style related items to be used.\n\nFor some reason, `heroku run rake assets:precompile` does not do the trick, so you need to force a rebuild. Here's the technique I'm using - which involves installing a plugin:\n\n    heroku plugins:install https://github.com/heroku/heroku-repo.git\n\nThen to force a rebuild of the app slug thereafter:\n\n    heroku repo:rebuild -a yourflow   # replace yourflow with your app name!\n\n\n\n## Advanced or esoteric things\n\n### Uploading a database from your local environment to Heroku\n\n    pg_dump -Fc --no-acl --no-owner localdbname \u003e /tmp/localdbname.dump\n    scp /tmp/localdbname.dump wherever@you.want # or use S3\n    heroku pgbackups:restore DATABASE 'http://url.goes.here/localdbname.dump'\n\n## FAQs\n\n**Why is it built in Sinatra/not using Rails/written in such a weird way?** Because first and foremost, it's software for me, and I wanted to have fun building it. I develop in quite an idiosyncratic way as I don't develop software professionally, work in a team, and I just do what I want, the way I want. Nonetheless, I have tried to ensure the *result* is of a high quality as that's all I care about.\n\n**How does the testing work?** The testing is primary acceptance based and uses `capybara-webkit`. You'll need to ensure you have Qt running for this to work - `brew install qt` may help here on OS X.\n\n## TODOs\n\n* Search\n* Have a 'moderator' role\n* Good caching - it's just RSS and front page for non logged in users for now\n* Work out the asset precompilation issue\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcbetta%2Fflow2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcbetta%2Fflow2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcbetta%2Fflow2/lists"}