mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
feat: add 52 per-tool SEO landing pages and public changelog (#145)
* feat: add 52 per-tool SEO landing pages and public changelog
- Create individual landing pages for all 52 tools at /tools/{slug}
with search-intent title tags, unique FAQs (156 Q&As), per-tool
features, and rich schema markup (BreadcrumbList, WebApplication,
HowTo, FAQPage)
- Replace static sitemap.xml with dynamic generation including all
tool URLs
- Refactor bento grid to import from @snapotter/shared (eliminates
330 lines of duplicated tool data) and link cards to tool pages
- Add @snapotter/shared as workspace dependency to landing site
- Add public changelog page to docs site with curated release notes
from v1.8 through v1.17
- Update docs nav and sidebar with changelog link
* feat: enhance SEO and performance with updated metadata, robots.txt, and llms.txt
This commit is contained in:
@@ -26,12 +26,25 @@ export default defineConfig({
|
||||
["meta", { property: "og:image:width", content: "1280" }],
|
||||
["meta", { property: "og:image:height", content: "640" }],
|
||||
["meta", { property: "og:image:alt", content: "SnapOtter - Self-Hosted Image Processing" }],
|
||||
["meta", { property: "og:url", content: "https://docs.snapotter.com" }],
|
||||
["meta", { property: "og:locale", content: "en_US" }],
|
||||
["meta", { name: "twitter:card", content: "summary_large_image" }],
|
||||
["meta", { name: "twitter:site", content: "@SnapOtterHQ" }],
|
||||
["meta", { name: "twitter:image", content: "https://docs.snapotter.com/og-image.png" }],
|
||||
],
|
||||
|
||||
transformHead({ pageData }) {
|
||||
const head: Array<[string, Record<string, string>]> = [];
|
||||
const canonicalUrl = `https://docs.snapotter.com/${pageData.relativePath.replace(/(^|\/)index\.md$/, "$1").replace(/\.md$/, "")}`;
|
||||
head.push(["meta", { property: "og:url", content: canonicalUrl }]);
|
||||
head.push(["meta", { property: "og:title", content: pageData.title }]);
|
||||
if (pageData.description) {
|
||||
head.push(["meta", { property: "og:description", content: pageData.description }]);
|
||||
head.push(["meta", { name: "twitter:description", content: pageData.description }]);
|
||||
}
|
||||
head.push(["meta", { name: "twitter:title", content: pageData.title }]);
|
||||
return head;
|
||||
},
|
||||
|
||||
vite: {
|
||||
plugins: [
|
||||
llmstxt({
|
||||
@@ -78,9 +91,10 @@ export default defineConfig({
|
||||
{ text: "Home", link: "/" },
|
||||
{ text: "Guide", link: "/guide/getting-started" },
|
||||
{ text: "API Reference", link: "/api/rest" },
|
||||
{ text: "Changelog", link: "/changelog" },
|
||||
{
|
||||
text: `v${pkg.version}`,
|
||||
link: "https://github.com/snapotter-hq/snapotter/releases",
|
||||
link: "/changelog",
|
||||
},
|
||||
],
|
||||
|
||||
@@ -110,6 +124,10 @@ export default defineConfig({
|
||||
{ text: "AI engine", link: "/api/ai" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "Project",
|
||||
items: [{ text: "Changelog", link: "/changelog" }],
|
||||
},
|
||||
],
|
||||
|
||||
search: {
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
---
|
||||
description: Release notes and version history for SnapOtter. See what's new, improved, and fixed in each release.
|
||||
---
|
||||
|
||||
# Changelog
|
||||
|
||||
## v1.17.0
|
||||
|
||||
Five new tools, a full image editor, SSO login, 20 languages. Probably should have been three separate releases, but here we are.
|
||||
|
||||
### New features
|
||||
|
||||
- **Image editor** -- Layers, brushes, shapes, adjustments, filters, curves, keyboard shortcuts. Runs in your browser, processes on your hardware.
|
||||
- **OIDC / SSO authentication** -- Login with Google, GitHub, Okta, or any OpenID Connect provider. Set a few env vars and your team uses their existing accounts.
|
||||
- **Meme generator** -- 100 built-in templates with text rendering via opentype.js. Or upload your own image.
|
||||
- **Beautify** -- Drop a screenshot in, get a polished image out. Device frames (macOS, Windows, browser), shadows, gradients, social media presets.
|
||||
- **Color blindness simulation** -- Preview how images look with protanopia, deuteranopia, tritanopia, and other color vision deficiencies.
|
||||
- **PNG transparency fixer** -- Detects fake-transparent PNGs and fixes them with BiRefNet HR-matting. Optional watermark removal via LaMa inpainting.
|
||||
- **AI canvas expand** -- Extend image boundaries with AI fill. Three quality tiers (fast, balanced, quality) depending on how much GPU time you want to trade.
|
||||
- **20 languages** -- Arabic, Chinese (Simplified/Traditional), Czech, Dutch, French, German, Hindi, Indonesian, Italian, Japanese, Korean, Polish, Portuguese, Russian, Spanish, Thai, Turkish, Ukrainian, Vietnamese. RTL works for Arabic.
|
||||
- **URL import** -- Paste URLs into the dropzone or bulk-import from a list. Server-side fetch with SSRF protection.
|
||||
- **Multi-file eraser** -- Draw erase masks across multiple images, process them all with one click. Strokes persist per-image.
|
||||
- **Pipeline import/export** -- Save tool chains as JSON, share them with others.
|
||||
- **17 new camera RAW formats** via exiftool, plus QOI, JP2, EPS, DDS, CUR, DPX, FITS, PPM/PGM/PBM, SVGZ, and APNG input. New output codecs for BMP, ICO, JP2, QOI. AVIF, TIFF, GIF, JXL, and PSD export recovered from a previously lost branch.
|
||||
|
||||
### Improvements
|
||||
|
||||
- **Image enhancement** -- Replaced the old pipeline with CLAHE + normalise + gamma. New Deep Enhance toggle uses the AI model for more aggressive results.
|
||||
- **Restore photo** -- Scratch detection rewritten with 8-angle Otsu filtering. LaMa inpainting now runs at native resolution.
|
||||
- **Exotic formats everywhere** -- OCR, image-to-PDF, favicon generator, composition, stitch, and vectorize all decode HEIC, RAW, PSD now.
|
||||
- **Compress** -- Target-size tolerance tightened from 5% to 1%. Target size is the default mode. Added stepper buttons and KB/MB unit selector.
|
||||
- **Sentry cleanup** -- 644 non-actionable events filtered. Real errors now handled properly.
|
||||
- **GPU detection** -- Better diagnostics for containers where CUDA is present but nvidia-smi is not.
|
||||
- **Auth-disabled mode** -- Anonymous user is seeded in the DB with admin role. API keys, pipelines, and user files no longer break on FK constraints.
|
||||
- **2,705+ new tests** across unit, integration, and E2E.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Upscale on CPU no longer times out on NAS boxes and low-power hardware.
|
||||
- QR code logo no longer makes the preview vanish permanently.
|
||||
- Crop overflow fixed for tall portrait images.
|
||||
- TIFF alpha files correctly force PNG output instead of producing corruption.
|
||||
- HDR/EXR decode converts to 8-bit before CLAHE, fixing decode failures.
|
||||
- Face landmarks input buffers converted to PNG before the Python sidecar, fixing crashes.
|
||||
- Find duplicates handles mixed-format batches and network errors.
|
||||
- Beautify preview updates in real time.
|
||||
- Progress bars for stitch and vectorize.
|
||||
- SVGZ handled by SVG-to-raster.
|
||||
- Non-ASCII filenames fixed via percent-encoded X-File-Results header.
|
||||
|
||||
### Upgrade
|
||||
|
||||
```bash
|
||||
docker pull snapotter/snapotter:1.17.0
|
||||
```
|
||||
|
||||
Or with Docker Compose:
|
||||
|
||||
```bash
|
||||
docker compose pull && docker compose up -d
|
||||
```
|
||||
|
||||
[Full diff on GitHub](https://github.com/snapotter-hq/SnapOtter/compare/v1.16.0...v1.17.0)
|
||||
|
||||
---
|
||||
|
||||
## v1.14.0
|
||||
|
||||
Unified Docker image with GPU auto-detection. One image handles both CPU and GPU workloads. Simplified compose to a single file with log rotation. Model pre-downloads now include verification and a smoke test.
|
||||
|
||||
---
|
||||
|
||||
## v1.13.0
|
||||
|
||||
Role-based access control (RBAC). 14 granular permissions, three built-in roles (admin, editor, user), custom role support. Permission checks on all API routes. Frontend tabs filtered by user permissions.
|
||||
|
||||
---
|
||||
|
||||
## v1.12.0
|
||||
|
||||
PDF to Image tool. Convert PDF pages to PNG, JPEG, WebP, or TIFF at custom DPI. Unified Docker image with GPU auto-detection.
|
||||
|
||||
---
|
||||
|
||||
## v1.11.0
|
||||
|
||||
Auto-generated llms.txt via vitepress-plugin-llms for AI-friendly documentation.
|
||||
|
||||
---
|
||||
|
||||
## v1.10.0
|
||||
|
||||
Content-aware resize (seam carving) with face protection. Resize images while preserving important content.
|
||||
|
||||
---
|
||||
|
||||
## v1.9.0
|
||||
|
||||
Stitch / Combine tool. Join images side by side, stacked vertically, or in a custom grid.
|
||||
|
||||
---
|
||||
|
||||
## v1.8.0
|
||||
|
||||
Edit Metadata tool. View and edit EXIF, IPTC, and XMP metadata with a granular strip/keep interface.
|
||||
|
||||
---
|
||||
|
||||
## Older releases
|
||||
|
||||
For the full commit-level changelog including patch releases, see [GitHub Releases](https://github.com/snapotter-hq/snapotter/releases).
|
||||
@@ -1,4 +1,25 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
User-agent: GPTBot
|
||||
Allow: /
|
||||
|
||||
User-agent: Google-Extended
|
||||
Allow: /
|
||||
|
||||
User-agent: ClaudeBot
|
||||
Allow: /
|
||||
|
||||
User-agent: PerplexityBot
|
||||
Allow: /
|
||||
|
||||
User-agent: OAI-SearchBot
|
||||
Allow: /
|
||||
|
||||
User-agent: Applebot-Extended
|
||||
Allow: /
|
||||
|
||||
User-agent: cohere-ai
|
||||
Allow: /
|
||||
|
||||
Sitemap: https://docs.snapotter.com/sitemap.xml
|
||||
|
||||
Reference in New Issue
Block a user