🩸 Privacy-respecting, anonymous, NoJS-supporting Pinterest frontend. https://pain.thirtysix.pw
  • Python 41.2%
  • HTML 38.6%
  • CSS 10.9%
  • Dockerfile 5%
  • JavaScript 2.9%
  • Other 1.4%
Find a file
FranklyFlawless e41d96b180 docs: add Caddy deploy instructions, add new instance (#7)
This pull request simplifies the Docker instructions, adds Caddy reverse proxy instructions, and adds my Painterest instance.

Reviewed-on: #7
Co-authored-by: FranklyFlawless <[email protected]>
Co-committed-by: FranklyFlawless <[email protected]>
2025-05-11 10:33:34 +00:00
src fix: pre-compile tailwind css (#6), switch to uv 2025-03-23 02:39:16 +03:00
static feat: initial commit 2024-08-25 03:55:16 +03:00
templates docs: add changelog 2024-10-03 22:23:38 +03:00
.dockerignore fix: pre-compile tailwind css (#6), switch to uv 2025-03-23 02:39:16 +03:00
.editorconfig feat: initial commit 2024-08-25 03:55:16 +03:00
.gitignore feat: initial commit 2024-08-25 03:55:16 +03:00
.python-version feat: initial commit 2024-08-25 03:55:16 +03:00
CHANGELOG.md fix: search returning no results (closes #4) 2025-03-18 00:46:19 +03:00
compose.yaml feat: initial commit 2024-08-25 03:55:16 +03:00
Dockerfile fix: copy templates during css build, pin tailwindcss version (#6) 2025-03-23 12:27:34 +03:00
instances.json docs: add Caddy deploy instructions, add new instance (#7) 2025-05-11 10:33:34 +00:00
justfile fix: pre-compile tailwind css (#6), switch to uv 2025-03-23 02:39:16 +03:00
LICENSE feat: initial commit 2024-08-25 03:55:16 +03:00
pyproject.toml fix: pre-compile tailwind css (#6), switch to uv 2025-03-23 02:39:16 +03:00
README.md docs: add Caddy deploy instructions, add new instance (#7) 2025-05-11 10:33:34 +00:00
tailwind.config.js fix: copy templates during css build, pin tailwindcss version (#6) 2025-03-23 12:27:34 +03:00
uv.lock fix: pre-compile tailwind css (#6), switch to uv 2025-03-23 02:39:16 +03:00

🩸 Painterest

Privacy-respecting, anonymous, NoJS-supporting Pinterest frontend. Based on disinterest.

🌐 Instances

See instances.json file.

Features

  • API

    • Search
    • Retrieval of specific pins
      • Basic information (name, description, image and tags)
      • Comments
    • Image proxy
    • Search by tags
  • Frontend

    • Homepage
    • Search (NoJS)
    • Search (JS/Infinite scroll)
    • Pins
      • Regular pins
      • Business pins
      • Video pins
      • Pins from other sites
      • Comments

🚀 Deployment

Clone repository:

git clone https://codeberg.org/thirtysix/painterest.git && cd painterest

🐳 With Docker

docker compose up -d

💻 Without containerization

python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.lock
uvicorn src.main:app --no-access-log --proxy-headers --forwarded-allow-ips '*' --host 0.0.0.0 --port 8889

🛡️ Running behind a reverse proxy

To run the app behind a reverse proxy, ensure that the appropriate proxy headers are added. Below is a sample configuration for NGINX:

location / {
    proxy_pass http://127.0.0.1:8889;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

For Caddy (binary installation), here is a sample Caddyfile configuration:

https://domain.tld {
        reverse_proxy localhost:8889
}

📄 Changelog

See CHANGELOG.md file.

🔧 Development

Install Rye by following the installation guide.

Use rye sync to install dependencies and required Python version.

Use rye run dev to start development server which will reload on every change to source code.

Use rye check --fix and rye fmt to lint and format code. Assumed to be run before each commit to guarantee code quality.

Use rye run basedpyright to ensure typing is correct.

📜 License

This project is licensed under the AGPLv3+ license - see the license file for details.