Giter VIP home page Giter VIP logo

mkoppmann / eselsohr Goto Github PK

View Code? Open in Web Editor NEW
9.0 4.0 1.0 738 KB

Eselsohr is a self-hostable bookmark manager for storing web articles.

License: European Union Public License 1.2

Dockerfile 0.70% Haskell 97.77% Shell 0.27% Nix 0.78% CSS 0.49%
haskell self-hosted ocap object-capabilities hacktoberfest bookmark three-layer-cake webkey principle-of-least-privilege principle-of-least-authority

eselsohr's People

Contributors

dependabot[bot] avatar mkoppmann avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

jakobu5

eselsohr's Issues

Improve error handling

Don’t use WithError inside the infrastructure layer. Let the errors return to the controller, where appropriate error pages can be loaded.

Catch exceptions for IO functions

Currently, some IO functions like reading or writing a file, or scraping a website, are throwing exceptions that are not handled. At least the common ones should be catched and converted into app specific errors.

Export article list as RSS/Atom/JSON feed

Thanks to our web keys it should be no problem to add authorized feeds to RSS aggregators.
If tags are supported (#37) then feeds could be customized to only display read/unread articles or articles with specific tags.

Add load function to repositories

The current implementation does not need it. It would still be useful for the test suite so it’s easier to verify state changing actions.

Provide JSON API

In addition to the HTML-only frontend, a separate JSON API would be handy so that other clients could get developed.
This should also showcase the chosen architecture as commands can be reused while queries are optimized for their specific output format. The main challenge will be the transportation of accesstokens. HATEOAS should be the solution for this.

Replace Clay With Plain CSS

Generating CSS with Clay doesn’t give us clear benefits, but it has some drawbacks:

  • Its current version does not support GHC 9.2+ although its master branch already supports 9.4
  • It’s not really easier to read or write than plain CSS
  • CSS generated by Clay always ends with a footer referring to the Clay website

Add Eselsohr image to Docker Hub

We already have a Dockerfile. For easy deployments, Eselsohr should also be available on Docker Hub for people who prefer containers.

Provide bookmarklet

It should be possible to add the current page to an article list via a bookmarklet.

PWA support

When a web application is recognized by browsers as a progressive web app it can be installed and used similar to a native application.

These features are currently missing according to the PWA criteria list:

  • Register a service worker with a fetch handler
  • Reference a web app manifest

This would unlock additional features. For example, new articles can be added with the native sharing functionality of the operating system. (see Web Share API)

Support migrations

Eselsohr currently does not support migrations for the persisted data. This is absolutely necessary.

Provide recovery option with email

It should be possible to add a recovery email address in case one forgets their collection unlock link.
The address could be stored as a hash.

Add versioning

Correct versioning is necessary for GitHub Releases, using Cachix (#4), and adding Eselsohr to Docker Hub (#3).

Requires #26.

Display timestamps with local timezone

Currently, timestamps are displayed for UTC. Two possible ways to fix this:

  1. use JavaScript (built-in support)
  2. add support for server-side storage of user settings. Timezone would then be one of the settings.

Solution 1 would be the easiest and the original timestamp would be displayed if JavaScript is disabled in the user’s browser.

Upgrade to GHC 9.2

This allows us to use the new dot notation. This should be done first before the module structure is refactored again. With the removal of Clay (see #157) all remaining dependencies should have support for 9.2.

Add new articles via email

It would be very nice if one could add an article by sending it via email.
Similar to Evernote or Instapaper.

Add import/export feature

It should be possible to migrate between Eselsohr instances. An import/export feature is required for this.

Remove “Unlock collection” page?

Having a place where people can paste in their collection unlock access token could teach them that it’s OK to do so.
This then would make it easier for attackers to try some phishing attacks.
Maybe it’s better to say right away that the token and the URL should stay together.

When we generate a new unlock access token from the command line the correct URL should also be displayed.
For this we would need our BASE_URL config option back.

Provide Linux binaries in CI or Releases

Haskell can be distributed as binary. We should provide one, at least with every release. Ideally, they would be completely statically-linked, so they have no dependencies on the system, but I’m not sure if this is currently possible with GitHub Actions.

Delete expired capabilities

Currently, expired capabilities are bit-rotting in the persisted state. Some cleanup job should take care of this.

Provide CI with GitHub Actions

This project was once part of a private monorepo with its own CI. Now, with the release on GitHub, we should provide a configuration file for GitHub actions. A simple CI that just builds the projects and runs the test suite would be a good start.

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.