{"id":"b1197c94-7f6e-4ea1-80c9-97f7d9e10a26","name":"Geekmarks","slug":"geekmarks","description":"Show HN: Geekmarks: An Open-Source, API-Driven, Geeky Bookmarking Service","website_url":"https://dmitryfrank.com/projects/geekmarks/article","category":["developer","api"],"score":{"overall":30,"raw":30,"capped":false,"verified":false,"breakdown":{"latency":6,"consistency":4,"doc_quality":2,"error_clarity":3,"auth_simplicity":2,"token_efficiency":3,"first_try_success":2,"response_parseability":4},"source":"prowl","credential_tested":false,"probe_health":{"status":"healthy","up_pct":1.0,"samples":3,"target":"website","p50_latency_ms":432,"last_probed":"2026-10-09T04:52:02.413462+00:00","lookback_hours":24,"no_response":0}},"latency":null,"uptime_30d":null,"protocols":["rest"],"auth_type":null,"mcp_manifest_url":null,"openapi_spec_url":null,"verified":false,"domain_verified":false,"claimed":false,"vendor_id":null,"status":"active","profile":null,"pricing":{"cost":0,"type":"free_self_hosted","notes":"Open source, requires self-hosting infrastructure and maintenance"},"last_crawled":"2026-10-08T19:32:07.878277+00:00","last_benchmarked":"2026-09-03T22:03:57.098713+00:00","supports_x402":false,"agent_auth_methods":null,"supports_streaming":false,"has_sandbox":false,"sdks":null,"llms_txt_url":"https://dmitryfrank.com/projects/geekmarks/article/llms.txt","similarity_score":null,"telemetry_evidence":null,"agent_signal":null,"mycelio":{"signed":false,"source":"heuristic","outline":[{"id":"security","depth":2,"heading":"Security","preview":"Reliable, Secure and Universal Backup for U2F Token   Treating Email More Like a Password Manager","size_bytes":97},{"id":"go","depth":2,"heading":"Go","preview":"Here's why I love Go   Mocking time and testing event loops in Go   Nerdlog: fast, remote-first, multi-host TUI log view…","size_bytes":352},{"id":"rust","depth":2,"heading":"Rust","preview":"Connect Four 3D: a virtual 3D board game   Rust Module System Encourages Poor Practices (Comparing to Go)","size_bytes":105},{"id":"c-embedded","depth":2,"heading":"C, Embedded","preview":"How I ended up writing a new real-time kernel   Unit-testing (embedded) C applications with Ceedling: let's write C code…","size_bytes":697},{"id":"c-qt","depth":2,"heading":"C++, Qt","preview":"Bot Terminal: a crossplatform utility that performs binary data exchange via serial port. It allows one to set up flexib…","size_bytes":168},{"id":"javascript","depth":2,"heading":"JavaScript","preview":"How JavaScript closures work under the hood: an illustrated explanation   Testing Socket.io + Passport.socketio with Moc…","size_bytes":122},{"id":"lisp","depth":2,"heading":"Lisp","preview":"Let's Run Lisp on a Microcontroller (this one is not at all practical, just for fun)","size_bytes":84},{"id":"vim","depth":2,"heading":"Vim","preview":"Vim: convenient code navigation for your projects: thorough explanation of advanced Indexer + Vimprj usage   Vim-Indexer…","size_bytes":383},{"id":"linux","depth":2,"heading":"Linux","preview":"My Udev Notify: little bash script that shows notifications when any USB device is plugged/unplugged   Fuzzy bookmarks f…","size_bytes":229},{"id":"cheat-sheets","depth":2,"heading":"Cheat-Sheets","preview":"Docker: Printable Quick Reference (Cheat Sheet)","size_bytes":47},{"id":"blog","depth":2,"heading":"Blog","preview":"Mongoose Embedded Networking Library on nRF51 and nRF52 (Bluetooth) \t \t \t\tI'm Tired of Makefiles \t \t \t\tStandard interfac…","size_bytes":310},{"id":"outside-of-software-engineering","depth":2,"heading":"Outside of software engineering","preview":"Bulgaria Freelance Taxes: Detailed Breakdown   Nature   Yesterday (amateur cover with my own silly lyrics)   Poems","size_bytes":114},{"id":"contact","depth":2,"heading":"Contact","preview":"mail@dmitryfrank.com   (PGP key)      RSS    Donate","size_bytes":51},{"id":"this-topic-does-not-exist-yet","depth":1,"heading":"This topic does not exist yet","preview":"You've followed a link to a topic that doesn't exist yet. If permissions allow, you may create it by clicking on “Create…","size_bytes":136}],"readiness":80,"fetched_at":1788473037,"affordances":[{"kind":"link","label":"RSS","target":"https://dmitryfrank.com/lib/plugins/feed/feed.php?plugin=blog&fn=getBlog&ns=blog&title=Blog"},{"kind":"link","label":"Dmitry Frank","target":"https://dmitryfrank.com/start"},{"kind":"link","label":"Sitemap","target":"https://dmitryfrank.com/projects/geekmarks/article/llms.txt?do=index"},{"kind":"link","label":"Log In","target":"https://dmitryfrank.com/projects/geekmarks/article/llms.txt?do=login&sectok=7676258971e69c6613b6a0cded436c9e"},{"kind":"link","label":"https://dmitryfrank.com/about","target":"https://dmitryfrank.com/about"},{"kind":"link","label":"Reliable, Secure and Universal Backup for U2F Token","target":"https://dmitryfrank.com/articles/backup_u2f_token"},{"kind":"link","label":"Treating Email More Like a Password Manager","target":"https://dmitryfrank.com/articles/treating_email_more_like_a_password_manager"},{"kind":"link","label":"Here's why I love Go","target":"https://dmitryfrank.com/articles/i_love_go"},{"kind":"link","label":"Mocking time and testing event loops in Go","target":"https://dmitryfrank.com/articles/mocking_time_in_go"},{"kind":"link","label":"Nerdlog: fast, remote-first, multi-host TUI log viewer with timeline histogram and no central server","target":"https://dmitryfrank.com/projects/nerdlog/article"},{"kind":"link","label":"Geekmarks","target":"https://dmitryfrank.com/projects/geekmarks/article"},{"kind":"link","label":"Why not improve error handling in our Go projects?","target":"https://dmitryfrank.com/articles/better_error_handling_in_go"},{"kind":"link","label":"Connect Four 3D","target":"https://dmitryfrank.com/projects/connectfour-3d"},{"kind":"link","label":"Rust Module System Encourages Poor Practices (Comparing to Go)","target":"https://dmitryfrank.com/articles/rust_module_system_encourages_bad_practices"},{"kind":"link","label":"How I ended up writing a new real-time kernel","target":"https://dmitryfrank.com/articles/how_i_ended_up_writing_my_own_kernel"},{"kind":"link","label":"Unit-testing (embedded) C applications with Ceedling","target":"https://dmitryfrank.com/articles/unit_testing_embedded_c_applications"},{"kind":"link","label":"Object-oriented techniques in C","target":"https://dmitryfrank.com/articles/oop_in_c"},{"kind":"link","label":"Visualizing the Heap on Embedded Devices","target":"https://dmitryfrank.com/articles/heap_on_embedded_devices"},{"kind":"link","label":"TNeo RTOS","target":"https://dmitryfrank.com/projects/tneo"},{"kind":"link","label":"Bmp writer","target":"https://dmitryfrank.com/projects/bmp-writer"},{"kind":"link","label":"DFTrig","target":"https://dmitryfrank.com/projects/dftrig"},{"kind":"link","label":"Indent with tabs, align with spaces","target":"https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces"},{"kind":"link","label":"Bot Terminal","target":"https://dmitryfrank.com/projects/bterm"},{"kind":"link","label":"How JavaScript closures work under the hood","target":"https://dmitryfrank.com/articles/js_closures"},{"kind":"link","label":"Testing Socket.io + Passport.socketio with Mocha","target":"https://dmitryfrank.com/articles/socketio_passport_testing"},{"kind":"link","label":"Let's Run Lisp on a Microcontroller","target":"https://dmitryfrank.com/articles/lisp_on_mcu"},{"kind":"link","label":"Vim: convenient code navigation for your projects","target":"https://dmitryfrank.com/articles/vim_project_code_navigation"},{"kind":"link","label":"Vim-Indexer","target":"https://dmitryfrank.com/projects/vim-indexer"},{"kind":"link","label":"Vimprj","target":"https://dmitryfrank.com/projects/vimprj"},{"kind":"link","label":"Quit another window","target":"https://dmitryfrank.com/projects/vim-quit-another-window"}],"ttl_seconds":86400,"content_length":318},"featured":false,"sponsored":false,"source":null}