v2.0.1
What's Changed
- Refactor code using flask blueprints by @Zingzy in #3
- Bump gunicorn from 20.0.4 to 22.0.0 by @dependabot[bot] in #5
- Feature Add Bot Blocking for Users by @Zingzy in #25
- Feature Add Average URL Redirection Time by @Zingzy in #26
- 12 feature add tests to the project using pytest by @Zingzy in #29
- Add 'ips' field to redirect_url function configuration by @Zingzy in #33
- Update IP handling to ensure 'ips' field is not empty before processing by @Zingzy in #35
- Fix: Stats not updating properly by @Zingzy in #37
- Update mongoDB schema to store referrers in sanitized format by @Zingzy in #39
- Optimize IP Existence Check in ips Array Field by @Zingzy in #41
- Add aggregation functions for URLs statistics to reduce load times by @Zingzy in #43
- Bump actions/setup-python from 2 to 5 by @dependabot[bot] in #45
- Bump actions/checkout from 2 to 4 by @dependabot[bot] in #44
- Remove console log from password validation function by @Zingzy in #50
- Remove debug mode from app.run in main.py by @Zingzy in #51
- [BUG] Submitting an invalid short-code to the /stats endpoint causes an Internal Server Error by @Zingzy in #54
- Bump aiohttp from 3.10.10 to 3.10.11 by @dependabot[bot] in #58
- Bump jinja2 from 3.1.4 to 3.1.5 by @dependabot[bot] in #57
- Bump werkzeug from 3.0.4 to 3.0.6 by @dependabot[bot] in #56
- [BUG] Retrieve Visitor's Real IP Behind Cloudflare Proxy by @Zingzy in #61
- Bump jinja2 from 3.1.5 to 3.1.6 by @dependabot[bot] in #63
- Bump setuptools from 75.1.0 to 78.1.1 by @dependabot[bot] in #67
- Bump flask-cors from 5.0.0 to 6.0.0 by @dependabot[bot] in #66
- Bump flask-cors from 5.0.0 to 6.0.0 by @dependabot[bot] in #69
- Redis based query caching to improve DB performance during load by @Zingzy in #70
- Fix password protected URLs 500 error by @Zingzy in #72
- Bump requests from 2.32.3 to 2.32.4 by @dependabot[bot] in #74
- Fix: Cache Stampede in /metric endpoint by @Zingzy in #75
- Move the old docs and self-hosting gudie to the new docs by @Zingzy in #76
- Refactor IP address handling in rate limiter by @Zingzy in #78
- Increase alias limit from 12 to 16 chars and minor api improvements by @Zingzy in #81
- Bump urllib3 from 2.4.0 to 2.5.0 by @dependabot[bot] in #80
- Add login System + Complete system overhaul by @Zingzy in #94
- feat: add URL preview feature by @Zingzy in #95
- chore(deps): bump werkzeug from 3.1.3 to 3.1.4 by @dependabot[bot] in #98
- chore(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in #96
- feat: optimize stats aggregation by implementing $facet for single DB stats aggeragations by @Zingzy in #100
- chore(deps): bump urllib3 from 2.5.0 to 2.6.0 by @dependabot[bot] in #102
- Chore/Oauth Refactor & Dead code Cleanup by @Zingzy in #116
- Upgrade deps by @Zingzy in #117
- Feat/architecture revamp by @Zingzy in #121
- chore(deps): bump astral-sh/setup-uv from 6 to 7 by @dependabot[bot] in #123
- chore(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #122
- fix: add field validator to handle null owner_id in UrlV2Doc by @Zingzy in #124
- Fix incorrect github star count by @Zingzy in #126
- chore(deps): bump codecov/codecov-action from 5 to 6 by @dependabot[bot] in #129
- Fix email confirm access bug by @Zingzy in #131
- fix: update pre-commit configuration and dependencies by @Zingzy in #132
- fix: handle document overflow in update operations Legacy URLs by @Zingzy in #137
- fix: prevent modification and deletion of blocked URLs in UrlService by @Zingzy in #141
- Feat/strenumify hardcoded strings by @Zingzy in #142
- feat: redirect to dashboard on login for authenticated users in landing page by @Zingzy in #143
- refactor: simplify error page layout by @Zingzy in #144
- feat: improve hCaptcha support & site analytics support by @Zingzy in #145
- feat: enhance JWT security checks and improve OTP verification logic by @Zingzy in #138
- feat: enhance mobile navigation and update progress dot functionality in V2 announcement modal by @Zingzy in #148
- feat: improve validation error responses with detailed field information by @Zingzy in #149
- feat: implement service wiring and enhance repository error handling by @Zingzy in #156
- refactor: field handler registry, response DTO factories, and password verification on UrlCacheData by @Zingzy in #157
- feat: add apps management page and device authorization flow by @Zingzy in #146
- refactor: reorganize authentication routes and services by @Zingzy in #158
- refactor: update dependencies and streamline service imports by @Zingzy in #159
- feat: create base email template and refactor existing email template… by @Zingzy in #163
- Feat/frontend rearchirecture by @Zingzy in #150
- feat: production deploy via Hetzner + Cloudflare Tunnel by @Zingzy in #169
- fix(deploy): write IMAGE_TAG to .env, use explicit --env-file by @Zingzy in #171
- upgrade deps by @Zingzy in #172
- feat(infra): replace CF Tunnel with direct origin + Caddy by @Zingzy in #173
- Feat: Feature rollout system by @Zingzy in #179
- feat: Introduce domain handling for URL services and caching by @Zingzy in #180
- build(deps): bump docker/login-action from 3 to 4 by @dependabot[bot] in #178
- build(deps): bump docker/setup-buildx-action from 3 to 4 by @dependabot[bot] in #177
- build(deps): bump appleboy/ssh-action from 1.0.3 to 1.2.5 by @dependabot[bot] in #176
- build(deps): bump actions/checkout from 4 to 6 by @dependabot[bot] in #175
- build(deps): bump docker/build-push-action from 5 to 7 by @dependabot[bot] in #174
- chore(deps): bump python from 3.12-slim to 3.14-slim by @dependabot[bot] in #135
- feat: Implement tenant resolver and domain ownership verification strategies by @Zingzy in #181
- feat: Implement Cloudflare SaaS integration for custom domain management by @Zingzy in #186
- feat: Implement Cloudflare Worker for custom domain traffic routing by @Zingzy in #187
- Refactor CF SaaS backend and custom domain service for improved DNS h… by @Zingzy in #188
- feat(custom-domains): public API + dashboard + tenant routing policy by @Zingzy in #189
- feat(custom-domains): lifecycle fixes + add/manage flow redesign by @Zingzy in #190
- feat(custom-domains): implement per-domain routing configuration updates by @Zingzy in #191
- feat(apps): mark spoo-cli live with loopback redirect URI by @Zingzy in #202
- chore(deps): upgrade Python dependencies via uv by @Zingzy in #204
- build(deps): bump codecov/codecov-action from 6 to 7 by @dependabot[bot] in #200
- build(deps): bump docker/metadata-action from 5 to 6 by @dependabot[bot] in #182
- fix(tests): restore CI compat with pyjwt 2.13 and fastapi 0.137 by @Zingzy in #206
- Feat/click event fanout by @Zingzy in #213
- build(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #208
- chore: bump dependencies by @Zingzy in #215
- chore: ship click worker logs to axiom by @Zingzy in #217
- CF edge cache for hot URLs by @Zingzy in #218
- Fix edge deploy job toolchain by @Zingzy in #222
- Beta environment slice by @Zingzy in #220
- Pin production KV namespace id by @Zingzy in #223
- ci: release-based deploy pipeline by @Zingzy in #219
New Contributors
- @Zingzy made their first contribution in #3
- @dependabot[bot] made their first contribution in #5
Full Changelog: https://github.com/spoo-me/spoo/commits/v2.0.1