{"id":16696568,"url":"https://github.com/zblesk/obskurnee","last_synced_at":"2025-03-21T19:31:30.827Z","repository":{"id":47841936,"uuid":"384424664","full_name":"zblesk/obskurnee","owner":"zblesk","description":"A companion app for your book club","archived":false,"fork":false,"pushed_at":"2024-10-14T19:13:12.000Z","size":8741,"stargazers_count":19,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-15T01:37:44.065Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zblesk.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2021-07-09T12:05:06.000Z","updated_at":"2025-03-03T03:03:36.000Z","dependencies_parsed_at":"2024-06-24T17:02:24.018Z","dependency_job_id":null,"html_url":"https://github.com/zblesk/obskurnee","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zblesk%2Fobskurnee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zblesk%2Fobskurnee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zblesk%2Fobskurnee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zblesk%2Fobskurnee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zblesk","download_url":"https://codeload.github.com/zblesk/obskurnee/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244855466,"owners_count":20521648,"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","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":[],"created_at":"2024-10-12T17:44:07.862Z","updated_at":"2025-03-21T19:31:30.144Z","avatar_url":"https://github.com/zblesk.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Obskurnee - a companion for your Book club\n\n![logo](./logo.png)\n\n[![Build Status](https://bzzz.zble.sk/api/badges/zblesk/Obskurnee/status.svg)](https://bzzz.zble.sk/zblesk/Obskurnee)\n\n**Do you have a book club? Are you looking for an app that would let you suggest books to one another, then vote for the ones you're going to read next? Would you like Goodreads integration? Then Obskurnee might be for you.**\n\nObskurnee is a simple, user-friendly web app that will help you decide on your book club's next read. It will also let you add book recommendations when you've read something you Just Have To Tell Everyone About. You can review the books your Book club has read and share the ones you're currently reading (via Goodreads). But not much else. We've kept the feature set small by design - we wanted to implement the workflow we use, not cover every possible use-case.\n\nOur aim was to make the app user friendly and intuitive to use. \n\n\u003e  ℹ Keep in mind: there is no 'central service' where you could register and just start using the app, at least not for now. You have to run the web app yourself. If you just want to check it out, have a look at the [demo](https://obskurnee.zblesk.net/). Simply log in with any made-up email address and password.\n\n\u003e  ℹ The [GitHub](https://github.com/zblesk/obskurnee) repository is a mirror. \n\n\u003e  ℹ Some features you might expect from an app are still missing. Since our free time is limited, we made a polished MVP we were able to start using straight away; we expect to be adding more in the future, but it might take a while.\n\n**Available in English and Slovak**.\n\nIf you want to chat, feel free to join Obskurnee's Matrix chat room at [#obskurnee:zble.sk](https://matrix.to/#/#obskurnee:zble.sk).\n\n# Features and screenshots\n\nThe way Obskurnee works is simple: When your book club is ready for a new book, a moderator opens a new voting round. **All members can add any number of suggestions. Once a moderator closes the round, a poll is automatically generated. When all members have voted, the poll is evaluated and the chosen book is featured on the home page.**\n\nAside from the current book, the home page features a global notice board (empty and thus hidden on this screenshot), and ongoing activities, such as voting.\n\n![Home page](./Screens/home.png)\n\nA shelf for all the books you've read together. Users can **rate and review** any of these books.\n\n![All books](./Screens/shelf.png)\n\nVoting rounds offer two options: either a direct vote for books or the choice of a round with specific topics.\n\n![Voting rounds](./Screens/voting_rounds.png)\n\nThe **topic** option entails a vote in two stages. First, the members suggest book topics (such as a particular genre, year of publication, nationality of author etc.), and once the winning theme is selected, a new round for **books** related to this theme is automatically opened.\n\nThe easiest way to add a book is to copy and paste a Goodreads URL and wait for it to be scraped, with the option to add further comments. All large text fields support **Markdown**. Everything you'd expect from MD should be there; plus, you can use `::this::` to mark a spoiler.\n\n![Adding a book](./Screens/adding_book.gif)\n\n\n\n**Recommendations** work in the same way as the books suggested for voting, except they're not tied to a specific round. Use these as general recommendations for other members of the book club.\n\nOnly **moderators can add new users** (though this is disabled in the demo). Once logged in, **new users are prompted to fill out their profiles** - especially their Goodreads profile (which is also used to **load their \"Currently Reading\" shelf**), phone number (since we mainly communicate over Whatsapp), and a brief bio about themselves and/or their reading preferences. Each user's page also shows their reviews and recommendations.\n\n# [Try the demo](https://obskurnee.zblesk.net/)\n\n**Enter *any* email and password.**\n\n# Setup and tech info\n\n⚠ **Obskurnee is meant to run behind a proxy.** It does not offer built-in HTTPS support. Do not expose your instance directly to the internets.\n\n## Quickstart\n\nTo try it out, run `docker run -p 8080:8080 -e DefaultCulture=en zblesk/obskurnee`.\n\nThen navigate to http://localhost:8080/setup and create the first user.\n\n## Docker-compose\n\nThe above doesn't persist your data, so while good for giving Obskurnee a try, don't run it in prod like that. \n\nA minimal setup with persistence and mailing via Mailgun looks like this:\n\n```yaml\nversion: \"3\"\n\nservices:\n  obskurnee:\n    image: zblesk/obskurnee:latest\n    restart: unless-stopped\n    ports:\n      - 8080:8080\n    volumes:\n      - ./data:/obskurnee/data\n    environment:\n      - SiteName=Book club!\n      - BaseUrl=https://obskurnee.mydomain.com\n      - DefaultCulture=en\n      - SymmetricSecurityKey=87965trfvbh86somebigrandomsecuritykeyhere\n      - MailerType=mailgun\n      - Mailgun__EndpointUri=https://api.mailgun.net/v3/\n      - Mailgun__SenderEmail=Bookclub \u003cbookclub@mydomain.com\u003e\n      - Mailgun__SenderDomainName=mydomain.com\n      - Mailgun__ApiKey=key-super1337secret\n```\n\nChange the environment variables to your real values; most importantly, mind that you set the path in `volumes` (i.e. `./data` in the example) to a location where you want all the application's data stored.\n\nSave it as `docker-compose.yml` and start with `docker-compose up`. \n\nThen navigate to http://localhost:8080/setup and create the first user.\n\n## nginx reverse proxy config\n\n[Here's a blog post](https://zblesk.net/blog/putting-obskurnee-behind-a-proxy/) with some technical background. The important part right now is that some features use Signlar, which uses WebSockets, so the proxy must needs take that into account.\n\n```conf\nmap $http_connection $connection_upgrade {\n    \"~*Upgrade\" $http_connection;\n    default keep-alive;\n}\n\nserver {\n    server_name obskurnee.mydomain.com;\n\n    location /hubs {\n       proxy_pass http://127.0.0.1:8080;\n       proxy_set_header Upgrade $http_upgrade;\n       proxy_set_header Connection $connection_upgrade;\n       proxy_cache off;\n       proxy_buffering off;\n       proxy_read_timeout 100s;\n\n       proxy_set_header Host $host;\n       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n       proxy_set_header X-Forwarded-Proto $scheme;\n     }\n\n    location / {\n       proxy_pass http://127.0.0.1:8080;\n\n       proxy_http_version 1.1;\n       proxy_set_header Upgrade $http_upgrade;\n       proxy_set_header Connection keep-alive;\n       proxy_set_header Host $host;\n       proxy_cache_bypass $http_upgrade;\n       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n       proxy_set_header X-Forwarded-Proto $scheme;\n\n       proxy_connect_timeout 100s;\n       proxy_read_timeout 100s;\n\n       gzip_types application/json application/javascript;\n       gzip_proxied no-cache no-store private expired auth;\n     }\n}\n```\n\n# Development \n\nYou will need .NET 8.0 and Node 18.\n\n1. Clone repo\n2. `cd .\\Obskurnee\\obskurnee.client\\`\n3. `npm install`\n4. `cd ..\\Obskurnee.Server\\`\n5. `dotnet run`\n\nThat should let you access your local copy at localhost.\n\nOr just open the `.sln` file in Visual Studio  2022 and let it handle the rest.\n\n# License\n\nCopyright (c) 2021 Ladislav Benc\n\nPersonal Use License\n\nObskurnee is available for personal use only. Feel free to run it for yourself and/or your friends on your own server, for non-commercial purposes only. \n\nSoftware is provided without any guarantees. Use at your own risk. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzblesk%2Fobskurnee","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzblesk%2Fobskurnee","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzblesk%2Fobskurnee/lists"}