All Projects → fully-forged → Memento

fully-forged / Memento

Licence: mit
Collect saved items from different sources around the web

Programming Languages

elixir
2628 projects

Projects that are alternatives of or similar to Memento

Elixirbooks
List of Elixir books
Stars: ✭ 1,021 (+1047.19%)
Mutual labels:  phoenix, phoenix-framework, otp
Guardian auth
The Guardian Authentication Implementation Using Ecto/Postgresql Elixir Phoenix [ User Authentication ]
Stars: ✭ 15 (-83.15%)
Mutual labels:  postgresql, phoenix, phoenix-framework
Realtime
Listen to your to PostgreSQL database in realtime via websockets. Built with Elixir.
Stars: ✭ 4,278 (+4706.74%)
Mutual labels:  postgresql, phoenix, phoenix-framework
Cercle
Cercle is a CRM+Project Manager for your organization - Phoenix Framework & Vuejs
Stars: ✭ 284 (+219.1%)
Mutual labels:  phoenix, phoenix-framework
game of life-elixir
An implementation of Conway's Game of Life in Elixir
Stars: ✭ 22 (-75.28%)
Mutual labels:  phoenix, phoenix-framework
phoenix bakery
Better compression for your Phoenix assets
Stars: ✭ 25 (-71.91%)
Mutual labels:  phoenix, phoenix-framework
ticker-phoenix
Elixir Phoenix Stock Quotes API (IEX Trading)
Stars: ✭ 15 (-83.15%)
Mutual labels:  phoenix, otp
React Phoenix
Make rendering React.js components in Phoenix easy
Stars: ✭ 426 (+378.65%)
Mutual labels:  phoenix, phoenix-framework
Ex rated
ExRated, the Elixir OTP GenServer with the naughty name that allows you to rate-limit calls to any service that requires it.
Stars: ✭ 328 (+268.54%)
Mutual labels:  phoenix, otp
Remote retro
Free, world-class retrospectives
Stars: ✭ 474 (+432.58%)
Mutual labels:  phoenix, phoenix-framework
Analytics
Simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics.
Stars: ✭ 9,469 (+10539.33%)
Mutual labels:  postgresql, phoenix
Ansible Elixir Playbooks
Ansible playbooks for Elixir build server and Phoenix Website. Sample app here: https://github.com/LunarLogic/phoenix_website
Stars: ✭ 39 (-56.18%)
Mutual labels:  postgresql, phoenix
curious messenger
Companion repository for Phoenix LiveView Messenger app by Curiosum.dev. Part 1: https://curiosum.dev/blog/elixir-phoenix-liveview-messenger-part-1?utm_source=github&utm_medium=social, Part 2: https://curiosum.dev/blog/elixir-phoenix-liveview-messenger-part-2?utm_source=github&utm_medium=social, Part 3: https://curiosum.dev/blog/elixir-phoenix-l…
Stars: ✭ 30 (-66.29%)
Mutual labels:  phoenix, phoenix-framework
pryin
PryIn is an Application Performance Monitoring platform for your Elixir/Phoenix application.
Stars: ✭ 25 (-71.91%)
Mutual labels:  phoenix, phoenix-framework
Papercups
Open-source live customer chat
Stars: ✭ 4,554 (+5016.85%)
Mutual labels:  phoenix, phoenix-framework
elixir jobs
A job board to publish and find Elixir offers.
Stars: ✭ 83 (-6.74%)
Mutual labels:  phoenix, phoenix-framework
Hammer
An Elixir rate-limiter with pluggable backends
Stars: ✭ 366 (+311.24%)
Mutual labels:  phoenix, phoenix-framework
king of tokyo
👑 King of Tokyo Multiplayer Board Game using Phoenix LiveView
Stars: ✭ 25 (-71.91%)
Mutual labels:  phoenix, phoenix-framework
phoenix bootstrap form
Bootstrap 4 Forms for Phoenix/Elixir Applications
Stars: ✭ 38 (-57.3%)
Mutual labels:  phoenix, phoenix-framework
Awesome Phoenix
🔥 Collection of awesome open-source apps made with Phoenix Framework
Stars: ✭ 481 (+440.45%)
Mutual labels:  phoenix, phoenix-framework

Memento

Intro

Memento is a single-tenant, personal aggregator for information you “save” on different platforms, making that content searchable and partially backed up. Aggregation is automatic every 5 minutes.

Memento Screenshot

It currently supports:

  • Twitter favourites
  • Instapaper articles
  • Pinboard bookmarks
  • GitHub starred repositories

All data gets saved in a single Postgresql table (for easy search and backup).

The application scope is small, but one of the goals is to make it extremely robust, with all bells and whistles you need for production code.

Application structure

Memento has four main components:

  • a capture supervision tree, where every source of content is monitored via a feed process
  • permanent storage powered by Ecto and Postgresql
  • a UI powered by Phoenix
  • a CLI-based UI written in Elixir

Capture

The capture workflow is structured around two ideas: Memento.Capture.Feed and Memento.Capture.Handler.

The Feed (implemented as a state machine via gen_statem) represents all common steps used to get data from any source:

  • Initial authentication (where needed)
  • Try to fetch the latest changes
  • On success, store the data, wait 5 minutes and try again
  • On failure, wait 30 seconds and try again

What changes between two sources is how some specific steps are performed and this where the Handler comes in: defined as a behaviour, it’s implemented by every source in their own way, as all APIs are different.

The Memento.Capture module provides a top level api for manual operations (e.g. forcing a refresh).

Storage and search

All entries are stored on Postgresql.

Configuration

Please check config/config.exs, configuration options are documented there.

Documentation

A copy of the documentation is available at https://memento-docs.surge.sh.

Development

You will need a series of environment variables (for authentication against the sources APIs).

  • INSTAPAPER_USERNAME
  • INSTAPAPER_PASSWORD
  • INSTAPAPER_OAUTH_CONSUMER_KEY
  • INSTAPAPER_OAUTH_CONSUMER_SECRET
  • PINBOARD_API_TOKEN
  • TWITTER_CONSUMER_KEY
  • TWITTER_CONSUMER_SECRET

Once inside the container you can:

  • call mix do deps.get, ecto.migrate to fetch elixir dependencies, compile and setup the db.
  • call iex -S mix phx.server to open an iex session with the running project (and then open http://localhost:4000)
  • call mix test to run tests

Deployment

The project is setup to deploy on Heroku, please make sure you:

CLI Utility

Running mix escript.build will build a memento cli executable in ./bin (which requires, to be executed, a working Erlang installation on the host machine) that can be used to browse a Memento instance from the command line.

Once built, you can call:

./bin/memento --base-url https://memento.my-site.com

For the full range of options, please call ./bin/memento --help.

Please note that the file can be safely moved and dropped in your $PATH.

For ease of using, it's recommended to pipe the command to less -r, which will paginate the results in glorious full colour.

./bin/memento --base-url https://memento.my-site.com | less -r

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].