{"id":50969393,"url":"https://github.com/aelithron/booklink","last_synced_at":"2026-06-19T00:30:47.892Z","repository":{"id":303755683,"uuid":"1015964552","full_name":"aelithron/booklink","owner":"aelithron","description":"An aesthetically-pleasing tool for ethically linking to books.","archived":false,"fork":false,"pushed_at":"2026-05-13T01:14:32.000Z","size":871,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T00:28:05.961Z","etag":null,"topics":["aesthetic","books","dynamic","link","nextjs"],"latest_commit_sha":null,"homepage":"https://booklnk.me","language":"TypeScript","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/aelithron.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-08T09:38:15.000Z","updated_at":"2026-05-26T21:45:08.000Z","dependencies_parsed_at":"2025-07-09T09:23:19.633Z","dependency_job_id":"d082d49e-4167-4020-a081-7e415edec5a0","html_url":"https://github.com/aelithron/booklink","commit_stats":null,"previous_names":["aelithron/booklink"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/aelithron/booklink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aelithron%2Fbooklink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aelithron%2Fbooklink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aelithron%2Fbooklink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aelithron%2Fbooklink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aelithron","download_url":"https://codeload.github.com/aelithron/booklink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aelithron%2Fbooklink/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34513020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"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":["aesthetic","books","dynamic","link","nextjs"],"created_at":"2026-06-19T00:30:45.811Z","updated_at":"2026-06-19T00:30:47.878Z","avatar_url":"https://github.com/aelithron.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Book Link\nAn aesthetically-pleasing tool for ethically linking to books.\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://shipwrecked.hackclub.com/?t=ghrm\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://cdn.hackclub.com/019d0cad-479a-7355-a7fc-bb822264d1e1/image.png\" \n         alt=\"This project is part of Shipwrecked, the world's first hackathon on an island!\" \n         style=\"width: 35%;\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n## The Problem\nI saw this interesting viewpoint from [Richard Stallman's website](https://stallman.org/amazon.html):\n\u003e \"If you want to use a URL to identify a book, please don't use an Amazon page! Doing so promotes Amazon.\"\n\nPersonally, I agree with this viewpoint. Who wants to promote big tech and billionaires when sharing links to books?\nHowever, most people wouldn't take the time to find another way.\n## The Solution\nA simple, aesthetically-pleasing way to share books that promotes ethical and small booksellers over billion-dollar megacorps.\nThis is a Next.JS based website for doing just that.\n## Using\nThis app is quite easy-to-use! Just go to [booklnk.me](https://booklnk.me) and type in the name of a book. It will create a page with all of the book's information, as well as links to buy it. The shortlink it gives you can be easily shared to others, allowing for a convienent, aesthetic, and ethical way to share books!\n### Self-hosting\nYou'll need a PostgreSQL database to run this app.\n1. Environment Variables \\\nIn your installation method, add the following environment variables:\n- `NEXT_PUBLIC_DMCA_EMAIL`: An email address for people to send DMCA complaints, as required by Google Books to use their API.\n- `GOOGLE_BOOKS_KEY`: An API key for Google Books (not an OAuth token). You can get one from Google Cloud at [this Google Cloud link](https://console.cloud.google.com/apis/credentials) (you may need to create a project in the Google Cloud interface).\n- `GOOGLE_BOOKS_LANG`: The language of books in searches, as a two-letter ISO-639-1 code (such as `\"en\"` or `\"fr\"`). Defaults to English (`\"en\"`) if not included.\n- `NYT_KEY`: An API key for the New York Times (not the secret). This needs access to the Books API and can be created at https://developer.nytimes.com.\n- `DATABASE_URL`: A PostgreSQL connection string in the format of `postgres://\u003cuser\u003e:\u003cpassword\u003e@\u003chost\u003e:\u003cport\u003e/\u003cdatabase\u003e`.\n(more info to come soon)\n- `OPENGRAPH_ROOT`: The root of your domain, which is used for metadata, in the format of `https://\u003cdomain\u003e.\u003ctld\u003e` (no trailing slash). You can also add a subdomain if applicable.\n2. You can install with Docker, or using another method. I can't provide configs for other environments, but I may be able to help you if you hit a roadblock (just DM @aelithron on Discord). I provided a Docker Compose file below, and the Docker image can be found on the Packages tab or simply pulled as `ghcr.io/aelithron/booklink:latest`.\n**Make sure to fill in the empty quotation marks as explained in step 1!**\n```yaml\nservices:\n  booklink:\n    image: ghcr.io/aelithron/booklink:latest\n    container_name: booklink\n    restart: always\n    environment:\n      NEXT_PUBLIC_DMCA_EMAIL: \"\"\n      GOOGLE_BOOKS_KEY: \"\"\n      GOOGLE_BOOKS_LANG: \"\"\n      NYT_KEY: \"\"\n      DATABASE_URL: \"\"\n      OPENGRAPH_ROOT: \"\"\n    ports:\n      - 3000:3000\n```\n3. There have been some issues with database migration! If you happen to get one in your console, or if the app errors with missing tables, do the following:\n  - Clone the source code (this GitHub repo) to your computer\n  - Create a file called `.env` containing `DATABASE_URL=\"postgres://\u003cuser\u003e:\u003cpassword\u003e@\u003chost\u003e:\u003cport\u003e/\u003cdatabase\u003e\"`, filling in the blanks.\n  - Open a terminal and run the commands `npm install` and `npx drizzle-kit push`. You should be good now, and this should be a one time thing.\n## Screenshot\n![IMG](https://hc-cdn.hel1.your-objectstorage.com/s/v3/de633b3f36e4e4d50e56e563dfee88cc61a10eae_booklink_showcase.png)\n## Extra Notes\n- Hit any roadblocks in setting up or using this app? Feel free to DM @aelithron on Discord, and I may be able to help :3\n- I hope to move to the Open Library API in the future (currently it is used in a part of the backend for getting Open Library IDs), as it's slightly hypocritical to take such an anti-big-company stance and then use a Google API. However, that API is the definition of spaghetti code and I didn't want to spend ten years debugging.\n- The current links provided for books, as ordered in the UI, are:\n  - Bookshop.org (preferred)\n  - ThriftBooks\n  - Barnes \u0026 Noble\n  - The Open Library\n  - Google Books\n  - Apple Books\n  - Amazon\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faelithron%2Fbooklink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faelithron%2Fbooklink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faelithron%2Fbooklink/lists"}