Don't forget to lycansubscribe

Compare changes

Choose any two refs to compare.

Changed files
+24 -21
app
+16 -16
Gemfile.lock
··· 7 GEM 8 remote: https://rubygems.org/ 9 specs: 10 - activemodel (7.2.2.2) 11 - activesupport (= 7.2.2.2) 12 - activerecord (7.2.2.2) 13 - activemodel (= 7.2.2.2) 14 - activesupport (= 7.2.2.2) 15 timeout (>= 0.4.0) 16 - activesupport (7.2.2.2) 17 base64 18 benchmark (>= 0.3) 19 bigdecimal ··· 41 concurrent-ruby (1.3.5) 42 connection_pool (2.5.4) 43 daemons (1.4.1) 44 - date (3.4.1) 45 dotenv (3.1.8) 46 drb (2.2.3) 47 ed25519 (1.4.0) 48 - erb (5.1.1) 49 eventmachine (1.2.7) 50 faye-websocket (0.12.0) 51 eventmachine (>= 0.12.0) ··· 55 i18n (1.14.7) 56 concurrent-ruby (~> 1.0) 57 io-console (0.8.1) 58 - irb (1.15.2) 59 pp (>= 0.6.0) 60 rdoc (>= 4.0.0) 61 reline (>= 0.4.2) ··· 64 logger (1.7.0) 65 minisky (0.5.0) 66 base64 (~> 0.1) 67 - minitest (5.26.0) 68 mustermann (3.0.4) 69 ruby2_keywords (~> 0.0.1) 70 net-scp (4.1.0) ··· 87 psych (5.2.6) 88 date 89 stringio 90 - rack (3.2.3) 91 rack-protection (4.2.1) 92 base64 (>= 0.1.0) 93 logger (>= 1.6.0) ··· 98 rackup (2.2.1) 99 rack (>= 3) 100 rainbow (3.1.1) 101 - rake (13.3.0) 102 - rdoc (6.15.0) 103 erb 104 psych (>= 4.0.0) 105 tsort 106 - reline (0.6.2) 107 io-console (~> 0.5) 108 ruby2_keywords (0.0.5) 109 securerandom (0.4.1) ··· 123 cbor (~> 0.5, >= 0.5.9.6) 124 eventmachine (~> 1.2, >= 1.2.7) 125 faye-websocket (~> 0.12) 126 - stringio (3.1.7) 127 thin (2.0.1) 128 daemons (~> 1.0, >= 1.0.9) 129 eventmachine (~> 1.0, >= 1.0.4) 130 logger 131 rack (>= 1, < 4) 132 tilt (2.6.1) 133 - timeout (0.4.3) 134 tsort (0.2.0) 135 tzinfo (2.0.6) 136 concurrent-ruby (~> 1.0)
··· 7 GEM 8 remote: https://rubygems.org/ 9 specs: 10 + activemodel (7.2.3) 11 + activesupport (= 7.2.3) 12 + activerecord (7.2.3) 13 + activemodel (= 7.2.3) 14 + activesupport (= 7.2.3) 15 timeout (>= 0.4.0) 16 + activesupport (7.2.3) 17 base64 18 benchmark (>= 0.3) 19 bigdecimal ··· 41 concurrent-ruby (1.3.5) 42 connection_pool (2.5.4) 43 daemons (1.4.1) 44 + date (3.5.0) 45 dotenv (3.1.8) 46 drb (2.2.3) 47 ed25519 (1.4.0) 48 + erb (6.0.0) 49 eventmachine (1.2.7) 50 faye-websocket (0.12.0) 51 eventmachine (>= 0.12.0) ··· 55 i18n (1.14.7) 56 concurrent-ruby (~> 1.0) 57 io-console (0.8.1) 58 + irb (1.15.3) 59 pp (>= 0.6.0) 60 rdoc (>= 4.0.0) 61 reline (>= 0.4.2) ··· 64 logger (1.7.0) 65 minisky (0.5.0) 66 base64 (~> 0.1) 67 + minitest (5.26.1) 68 mustermann (3.0.4) 69 ruby2_keywords (~> 0.0.1) 70 net-scp (4.1.0) ··· 87 psych (5.2.6) 88 date 89 stringio 90 + rack (3.2.4) 91 rack-protection (4.2.1) 92 base64 (>= 0.1.0) 93 logger (>= 1.6.0) ··· 98 rackup (2.2.1) 99 rack (>= 3) 100 rainbow (3.1.1) 101 + rake (13.3.1) 102 + rdoc (6.15.1) 103 erb 104 psych (>= 4.0.0) 105 tsort 106 + reline (0.6.3) 107 io-console (~> 0.5) 108 ruby2_keywords (0.0.5) 109 securerandom (0.4.1) ··· 123 cbor (~> 0.5, >= 0.5.9.6) 124 eventmachine (~> 1.2, >= 1.2.7) 125 faye-websocket (~> 0.12) 126 + stringio (3.1.8) 127 thin (2.0.1) 128 daemons (~> 1.0, >= 1.0.9) 129 eventmachine (~> 1.0, >= 1.0.4) 130 logger 131 rack (>= 1, < 4) 132 tilt (2.6.1) 133 + timeout (0.4.4) 134 tsort (0.2.0) 135 tzinfo (2.0.6) 136 concurrent-ruby (~> 1.0)
+3
Procfile
···
··· 1 + server: bin/server 2 + firehose: bin/firehose 3 + worker: bin/worker
+4 -4
README.md
··· 16 17 New bookmarks are private data, so at the moment they can't be imported until support for OAuth is added. 18 19 - Lycan is written in Ruby, using Sinatra and ActiveRecord, with Postgres as the database. The official instance runs at [lycan.feeds.blue](https://lycan.feeds.blue) (this service only implements an XRPC API – the UI is implemented as part of [Skythread](https://blue.mackuba.eu/skythread/)). 20 21 The service consists of three separate components: 22 ··· 27 28 ## Setting up on localhost 29 30 - This app should run on any somewhat recent version of Ruby, but of course it's recommended to run one that's still maintained, ideally the latest one. It's also recommended to install it with [YJIT support](https://shopify.engineering/ruby-yjit-is-production-ready), and on Linux also with [jemalloc](https://scalingo.com/blog/improve-ruby-application-memory-jemalloc). You will probably need to have some familiarity with the Ruby ecosystem in order to set it up and run it. 31 32 A Postgres database is also required (again, any non-ancient version should work). 33 ··· 55 2) the background worker, [`bin/worker`](bin/worker) 56 3) the Sinatra HTTP server, [`bin/server`](bin/server) 57 58 - The UI can be accessed through Skythread, either on the official site on [blue.mackuba.eu](https://blue.mackuba.eu/skythread/), or a copy you can download [from the repo](https://tangled.org/@mackuba.eu/skythread). Log in and open "[Archive search](https://blue.mackuba.eu/skythread/?page=search&mode=likes)" from the account menu – but importantly, to use the `localhost` Lycan instance, add `&lycan=local` to the URL. 59 60 You should then be able to start an import from there, and see the worker process printing some logs as it starts to download the data. (The firehose process needs to be running too, because the import job needs to pass through it first.) 61 ··· 103 104 ## Credits 105 106 - Copyright © 2025 Kuba Suder ([@mackuba.eu](https://bsky.app/profile/mackuba.eu)). 107 108 The code is available under the terms of the [zlib license](https://choosealicense.com/licenses/zlib/) (permissive, similar to MIT). 109
··· 16 17 New bookmarks are private data, so at the moment they can't be imported until support for OAuth is added. 18 19 + Lycan is written in Ruby, using Sinatra and ActiveRecord, with Postgres as the database. The official instance runs at [lycan.feeds.blue](https://lycan.feeds.blue) (this service only implements an XRPC API – the UI is implemented as part of [Skythread](https://skythread.mackuba.eu)). 20 21 The service consists of three separate components: 22 ··· 27 28 ## Setting up on localhost 29 30 + This app should run on any somewhat recent version of Ruby, though of course it's recommended to run one that's still getting maintenance updates, ideally the latest one. It's also recommended to install it with [YJIT support](https://shopify.engineering/ruby-yjit-is-production-ready), and on Linux also with [jemalloc](https://scalingo.com/blog/improve-ruby-application-memory-jemalloc). You will probably need to have some familiarity with the Ruby ecosystem in order to set it up and run it. 31 32 A Postgres database is also required (again, any non-ancient version should work). 33 ··· 55 2) the background worker, [`bin/worker`](bin/worker) 56 3) the Sinatra HTTP server, [`bin/server`](bin/server) 57 58 + The UI can be accessed through Skythread, either on the official site on [skythread.mackuba.eu](https://skythread.mackuba.eu), or a copy you can download [from the repo](https://tangled.org/mackuba.eu/skythread). Log in and open "[Archive search](https://skythread.mackuba.eu/?page=search&mode=likes)" from the account menu – but importantly, to use the `localhost` Lycan instance, add `&lycan=local` to the URL. 59 60 You should then be able to start an import from there, and see the worker process printing some logs as it starts to download the data. (The firehose process needs to be running too, because the import job needs to pass through it first.) 61 ··· 103 104 ## Credits 105 106 + Copyright © 2025 Kuba Suder ([@mackuba.eu](https://bsky.app/profile/did:plc:oio4hkxaop4ao4wz2pp3f4cr)). 107 108 The code is available under the terms of the [zlib license](https://choosealicense.com/licenses/zlib/) (permissive, similar to MIT). 109
+1 -1
app/server.rb
··· 8 9 class Server < Sinatra::Application 10 register Sinatra::ActiveRecordExtension 11 - set :port, 3000 12 13 PAGE_LIMIT = 25 14 HOSTNAME = ENV['SERVER_HOSTNAME'] || 'lycan.feeds.blue'
··· 8 9 class Server < Sinatra::Application 10 register Sinatra::ActiveRecordExtension 11 + set :port, ENV['PORT'] || 3000 12 13 PAGE_LIMIT = 25 14 HOSTNAME = ENV['SERVER_HOSTNAME'] || 'lycan.feeds.blue'