{"id":18942484,"url":"https://github.com/andreaflether/bookmarkd","last_synced_at":"2026-05-15T22:03:34.052Z","repository":{"id":45051911,"uuid":"307426784","full_name":"andreaflether/bookmarkd","owner":"andreaflether","description":"Bookmarkd allows your to save tweets in folders.","archived":false,"fork":false,"pushed_at":"2023-11-04T16:21:22.000Z","size":423,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-01T18:40:50.136Z","etag":null,"topics":["bookmarkd","bookmarks","ruby-on-rails","twitter","twitter-bookmarks"],"latest_commit_sha":null,"homepage":"http://bookmarkdd.herokuapp.com/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreaflether.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-10-26T15:58:46.000Z","updated_at":"2025-01-08T08:50:42.000Z","dependencies_parsed_at":"2025-05-25T11:08:17.896Z","dependency_job_id":"d15b1fef-79af-46a2-a270-8c6e555c95b6","html_url":"https://github.com/andreaflether/bookmarkd","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/andreaflether/bookmarkd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreaflether%2Fbookmarkd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreaflether%2Fbookmarkd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreaflether%2Fbookmarkd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreaflether%2Fbookmarkd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreaflether","download_url":"https://codeload.github.com/andreaflether/bookmarkd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreaflether%2Fbookmarkd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278881099,"owners_count":26062174,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bookmarkd","bookmarks","ruby-on-rails","twitter","twitter-bookmarks"],"created_at":"2024-11-08T12:33:02.687Z","updated_at":"2025-10-08T02:47:44.744Z","avatar_url":"https://github.com/andreaflether.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"./app/assets/images/bookmark-regular.svg\" width=\"10%\" align=\"right\"\u003e\n\n# Bookmarkd [![Build Status](https://www.travis-ci.com/andreaflether/bookmarkd.svg?branch=main)](https://www.travis-ci.com/andreaflether/bookmarkd) [![Maintainability](https://api.codeclimate.com/v1/badges/d3b4fd47ba56eafc4d50/maintainability)](https://codeclimate.com/github/andreaflether/bookmarkd/maintainability) [![codecov](https://codecov.io/gh/andreaflether/bookmarkd/branch/main/graph/badge.svg)](https://codecov.io/gh/andreaflether/bookmarkd) [![GitHub license](https://img.shields.io/github/license/andreaflether/bookmarkd)](https://github.com/andreaflether/bookmarkd/blob/main/LICENSE)\n\n\u003e Since Twitter only provides a single page to keep **all** your bookmarked tweets and usually, it takes forever to find a specific tweet in the middle of it all, extreme measures had to be taken. So, i present to you...\n\n**Bookmarkd**! With it, you can create as many folders as you want and add the tweets of your choice, by just pasting the tweet link :)\n\n## Main features\n### 📂 Save tweets of your choice in folders (a.k.a. Bookmark Folders)\nCreate folders by adding a name and a description. After that, just start adding tweets to it! The bookmarks will always be displayed in the order they were last added.\n### ⚙️ Custom privacy\nBy default, only you have access to your folders/bookmarked tweets. However, you can choose to leave the folder public.\n### 🔗 Folder sharing\nIf you chose to leave a folder public, you can copy its link and share it with the world! Other people seeing the folder will only have read privileges though, meaning only you can edit, add or delete bookmarks.\n### 🌓 Dark and Light mode\nDefault is the Light mode, but you can change the application mode at any time. \n### 🔢 Sort folders by Name, Last Update or Number of Bookmarks\nThe folders in the index page, by default, are sorted by the date they were last updated at, but you can also sort them by Name or by the Number of Bookmarks.\n### ✋ No repeated bookmarks\nBookmarkd will tell you if the tweet you're trying to add already exists in the current folder.\n### 📌 Pin folders\nYou can also pin a folder. They will always appear first in the index page (and the sidebar!).\n### 👩‍💻  Sign up via Bookmarkd or Twitter\nIt is possible to create an Bookmarkd account or log in via Twitter.\n\n## Technology\n* Ruby 2.5.5\n* Rails 5.2.4\n\n### Gems\n- [ActiveRecord TypedStore](https://github.com/byroot/activerecord-typedstore) to save user preferences.\n- [Cursor Paginate](https://github.com/otoyo/cursor-paginate) for cursor pagination on bookmarks display in a folder.\n- [Data Confirm Modal](https://github.com/ifad/data-confirm-modal) for custom and good looking data-confirmations via Bootstrap modals, avoiding the default behavior (Javascript's *\"Alert()\"*).\n- [Devise](https://github.com/heartcombo/devise) for user authentication with the default modules.\n- [Stringex](https://github.com/rsl/stringex) for custom URLs on Folder resources, using the parameterized name given by the user.\n- [Kaminari](https://github.com/kaminari/kaminari) + [Bootstrap 4 Kaminari Views](https://github.com/KamilDzierbicki/bootstrap4-kaminari-views) for pagination.\n- [Omniauth Twitter](https://github.com/arunagw/omniauth-twitter) combined with Devise's Omniauthable module to allow a user to sign in via Twitter.\n- [PG](https://deveiate.org/code/pg/) (Ruby interface to the [PostgreSQL RDBMS](http://www.postgresql.org/)) as the DB.\n- [Ransack](https://github.com/activerecord-hackery/ransack) to easily search folders in the 'Quick access' feature.\n- [Rest Client](https://github.com/rest-client/rest-client) for easier integration with the [oEmbed service](https://developer.twitter.com/en/docs/twitter-for-websites/timelines/guides/oembed-api), provided by Twitter API. \n- [Simple Form](https://github.com/heartcombo/simple_form) to write muss less code when it comes to forms, by using their custom wrappers (especifically Bootstrap).\n- [Webpacker](https://github.com/rails/webpacker) + [Yarn](https://classic.yarnpkg.com/) for package management (check [packages](#Packages)).\n\n### Packages \n- [Bootstrap](https://getbootstrap.com/) for design and responsiveness. Other Boostrap related packages were also used, such as:\n    - [Bootstrap MaxLength](https://github.com/mimo84/bootstrap-maxlength) for a better and readable indication to the user when a input has a specified max-length in it.\n    - [Bootstrap Show Password](https://github.com/wenzhixin/bootstrap-show-password) to allow the user to show/hide the value in a input with the password type. \n- [EasyAutocomplete](http://easyautocomplete.com/) to show results as the user types, in the 'Quick access' feature.\n- [ImagesLoaded](https://github.com/desandro/imagesloaded) and [Isotope](https://isotope.metafizzy.co/): \n    - Display folders in a grid layout and show a smooth animation when performing a action on a folder (pin/unpin/delete). \n    - Sort folders by Name, Updated At and Number of Bookmarks.\n    - Filter (Search) a folder.\n- [Font Awesome](https://fontawesome.com/) for icons.\n- [JQuery](https://jquery.com/) and [JQuery UI](https://jqueryui.com/) to simplify Javascript functions and an easier integration with Ajax. \n- [Tippy](https://atomiks.github.io/tippyjs/) to display sum up guides in tooltip form, in order to help the user understand on how the application works.\n- [Toastr](https://github.com/CodeSeven/toastr) for alerts and/or notices.\n\n Check \u003ckbd\u003e[package.json](./package.json)\u003c/kbd\u003e file\n\n## License\nThe project is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\nCopyright © 2020, Andréa Alencar.\n\n## Contributing\n\n1. Fork it ([http://github.com/andreaflether/bookmarkd/fork](http://github.com/andreaflether/bookmarkd/fork))\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create new Pull Request\n\nPlease write tests for anything you change, add or fix.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreaflether%2Fbookmarkd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreaflether%2Fbookmarkd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreaflether%2Fbookmarkd/lists"}