ashim-hq
fbaa603d03
fix: use fake timers in lazy-with-retry tests to prevent CI timeout
2026-04-24 15:34:58 +08:00
ashim-hq
2ec495058a
fix: mock connection store in lazy-with-retry tests to prevent CI timeout
2026-04-24 15:27:12 +08:00
ashim-hq
839df466a0
chore: add SnapOtter logo and clean up .gitignore
2026-04-24 15:20:04 +08:00
ashim-hq
f82eff4875
Merge feat/landing-page into main
...
Integrates the SnapOtter landing page with Nunito typography,
otter mascot logo, and teal open-source section accent.
2026-04-24 15:16:49 +08:00
ashim-hq
b6ccb4c6ea
feat: generate new SnapOtter favicon and PWA icons from logo.png
2026-04-24 14:47:57 +08:00
ashim-hq
1fe360471d
feat: add teal accent for open-source section differentiation
2026-04-24 14:47:22 +08:00
ashim-hq
d299aa8a72
feat: rebrand user-facing strings from ashim to SnapOtter
2026-04-24 14:47:17 +08:00
ashim-hq
9504662a5a
feat: apply Nunito font to all landing page section headings
2026-04-24 14:47:01 +08:00
ashim-hq
dff878d155
feat: replace placeholder logo with otter mascot in navbar
2026-04-24 14:46:52 +08:00
ashim-hq
af54a0e4da
feat: add Nunito font for headings and navbar wordmark
2026-04-24 14:46:44 +08:00
ashim-hq
a57e84ab28
feat: rebrand docs site from ashim to SnapOtter
2026-04-24 14:46:23 +08:00
ashim-hq
3185827c80
refactor: replace GemLogo with OtterLogo component for SnapOtter rebrand
2026-04-24 14:46:11 +08:00
ashim-hq
9f9fbf1fd7
test: add hardware benchmark scripts and Mac results
...
Includes bench.sh, bench-ai.sh, bench-limits.sh and corresponding
result files for Mac hardware baseline.
2026-04-24 14:23:12 +08:00
ashim-hq
2f09618897
fix: configure docs for custom domain docs.snapotter.com
...
Set base path to / and add CNAME for GitHub Pages custom domain.
2026-04-24 14:23:05 +08:00
ashim-hq
6af315ac44
test: add comprehensive landing page unit tests (85 tests)
...
6 test files covering all landing page components:
- BentoGrid: search filtering, category pills, tool count, empty state
- Navbar: links, mobile menu, GitHub star count formatting, fetch
- HowItWorks: Docker command display, clipboard copy, terminal chrome
- FAQ: accordion expand/collapse, all questions rendered
- Contact: form fields, validation, Formspree submission, error states
- Components: Hero, TypingCursor, WhyChoose, Enterprise, Pricing,
OpenSource, Footer (rendering, links, content verification)
Also updates vitest.config.ts with landing page aliases and automatic
JSX transform for Next.js components.
2026-04-24 13:15:15 +08:00
ashim-hq
d3fee31780
feat: add Privacy Policy and Terms and Conditions pages
2026-04-24 12:55:33 +08:00
ashim-hq
d48f13a75a
fix: replace tech stack FAQ with optional analytics FAQ
2026-04-24 12:50:35 +08:00
ashim-hq
a062aa9e5f
fix: E2E test isolation and analytics consent bugs
...
- Isolate test web server on port 2349 so E2E tests run alongside Docker
- Use fresh SQLite database per test run via DB_PATH, fixing missing
roles/audit_log tables from stale migration state
- Fix analytics consent redirect loop when ANALYTICS_ENABLED=false by
auto-declining consent instead of bare redirect
- Dismiss analytics consent via API in auth setup and RBAC test user
creation so the consent page never blocks UI tests
- Make Vite port and proxy target configurable via env vars
2026-04-24 01:24:15 +08:00
ashim-hq
4f362a9daf
feat: connect contact form to Formspree with loading state, success screen, and error handling
2026-04-24 00:46:32 +08:00
ashim-hq
d2c01d561e
fix: rename GitHub button to Star on GitHub with count badge
2026-04-24 00:43:46 +08:00
ashim-hq
e9cc76119a
feat: redesign Why Choose section with gradient cards, icons in white circles, label + subtitle
2026-04-24 00:42:04 +08:00
ashim-hq
d313a922d4
fix: move copy button to terminal header bar top-right
2026-04-24 00:32:58 +08:00
ashim-hq
9d751e72f3
fix: replace framer-motion FadeIn with CSS keyframe animations in hero to fix rendering issue
2026-04-24 00:31:13 +08:00
ashim-hq
99c64f7471
fix: reduce FadeIn viewport margin to prevent hero content from staying invisible
2026-04-24 00:26:43 +08:00
ashim-hq
fc30053451
fix: reduce Get Started section vertical padding
2026-04-24 00:25:28 +08:00
ashim-hq
4af02612cc
feat: add live GitHub star count, legal footer section, FAQ page
2026-04-24 00:24:44 +08:00
ashim-hq
dca0de9a7e
fix: use absolute paths for footer anchor links so they work from all pages
2026-04-24 00:19:17 +08:00
ashim-hq
0ed700aa49
fix: remove all demo.snapotter.com references, replace with Pricing link in footer
2026-04-24 00:18:02 +08:00
ashim-hq
758913ba7d
fix: make Company field required in contact form
2026-04-24 00:15:54 +08:00
ashim-hq
3859344dd8
fix: change pricing checkmarks to green
2026-04-24 00:14:53 +08:00
ashim-hq
92653d7864
feat: expand pricing with detailed features, remove Download from nav, remove RECOMMENDED tag
2026-04-24 00:14:12 +08:00
ashim-hq
4e0ac22de9
feat: premium gradient button with hover animation, redesign terminal with glow and macOS chrome
2026-04-24 00:11:17 +08:00
ashim-hq
2edee0c21d
fix: rename hero button to Start Using It with arrow, remove GitHub icon
2026-04-24 00:09:02 +08:00
ashim-hq
bca23d2008
feat: redesign terminal as single clickable block with full docker command and inline copy feedback
2026-04-24 00:08:14 +08:00
ashim-hq
ffe02b6f3a
feat: replace hero CTAs with single Get Started for Free button linking to GitHub
2026-04-24 00:06:42 +08:00
ashim-hq
afdd9fd165
feat: add copy button to terminal, expand Why Choose, add pricing section, reorder nav
2026-04-24 00:04:25 +08:00
ashim-hq
6e6c268910
feat: simplify Get Started to one docker command below hero, redesign Enterprise with gradient cards, remove About from nav
2026-04-23 23:56:50 +08:00
ashim-hq
fe384ddfe1
fix: update tests to match unlimited pipeline steps and avoid Sharp timeout
...
Pipeline step limit tests now expect success (200/201) since
MAX_PIPELINE_STEPS defaults to 0 (unlimited). Adversarial resize test
reduced from 65536 to 10000 width to prevent Sharp from attempting a
3.2B pixel allocation that times out on CI.
2026-04-23 23:56:08 +08:00
ashim-hq
ba8b1b2657
fix: remove AGPL trust line from hero, add Free. Forever. to animation
2026-04-23 23:52:02 +08:00
ashim-hq
2cf53acfa4
fix: show correct user count when MAX_USERS is unlimited
...
MAX_USERS defaults to 0 (unlimited) but the People section displayed
"1 / 0 users". Now shows "1 user" when no limit is configured.
2026-04-23 22:08:34 +08:00
ashim-hq
8c5945362a
refactor: simplify analytics consent page for higher opt-in
...
Remove two-column bullet lists, vendor names, and fear-priming "NEVER"
list. Replace with a single benefit-led paragraph and privacy note.
2026-04-23 22:08:27 +08:00
ashim-hq
b03c428e4f
fix: prevent pipeline preview dropzone from clipping at bottom
...
Dropzone had a hardcoded min-h-[400px] that overflowed the preview
panel's h-[38%] constraint. Add compact prop for constrained contexts.
2026-04-23 22:08:20 +08:00
ashim-hq
be4155d257
fix: replace require() with dynamic import() for analytics modules
...
PostHog and Sentry were silently disabled in production Docker builds.
The app runs as ESM ("type": "module") via tsx, where require() is not
defined. The catch blocks swallowed the ReferenceError, leaving both
clients as null. Switch to await import() and store the Sentry module
reference for use in the error handler.
2026-04-23 21:45:10 +08:00
ashim-hq
5fcec90d7b
feat: remove API and Three Ways sections, redesign How It Works as terminal mockup
2026-04-23 21:23:24 +08:00
ashim-hq
9f68c1a73e
feat: remove Trusted across industries section
2026-04-23 21:21:19 +08:00
ashim-hq
257e6b12c4
fix: redesign section flow with alternating white/gray backgrounds, remove all dark sections, change 50+ to 40+ tools
2026-04-23 21:07:47 +08:00
ashim-hq
16e92a1c2d
feat: replace licensing page with enterprise contact/demo page
2026-04-23 20:53:55 +08:00
ashim-hq
8aea77b4be
docs: remove hardcoded pipeline/batch limits, default to unlimited
...
Pipeline steps and batch size are now unlimited by default. The old
"20 steps" and "200 images" figures had no basis in the actual code
(MAX_BATCH_SIZE already defaulted to 0/unlimited). Both remain
configurable via MAX_PIPELINE_STEPS and MAX_BATCH_SIZE env vars.
Also includes updated hardware requirements and sidebar nav from
prior documentation audit.
2026-04-23 20:50:38 +08:00
ashim-hq
4bfbc51b77
test: add e2e spec for content-aware resize (seam carving)
...
Closes the last coverage gap from the master test matrix - 11 tests
covering toggle behavior, control visibility, input validation,
square mode, slider ranges, and end-to-end processing for PNG/HEIC.
2026-04-23 20:47:36 +08:00
ashim-hq
4f850ff38e
chore: gitignore docs/ except COMMUNITY_GUIDE.md
...
Remove RELEASE_QA_REPORT.md from tracking and ignore all docs/
content except COMMUNITY_GUIDE.md to keep local-only files private.
2026-04-23 20:39:43 +08:00
ashim-hq
7cbc2fe876
Merge branch 'feat/api-sync-documentation-audit'
2026-04-23 20:27:06 +08:00
Ashim and GitHub
97938bdc47
feat: API sync and documentation audit - 100% endpoint coverage ( #94 )
...
Code quality:
- Add Zod validation to 14 route handlers that used raw JSON.parse
(favicon, find-duplicates, barcode-read, upscale, blur-faces,
erase-object, colorize, enhance-faces, red-eye-removal,
remove-background/effects, auth, api-keys, roles, teams,
analytics, settings, user-files)
- Standardize error responses to safeParse + formatZodErrors pattern
- Replace unsafe `as` type casts with schema validation
OpenAPI spec (89 -> 115 operations):
- Add 14 missing tool endpoints (adjust-colors, sharpening,
optimize-for-web, image-enhancement, noise-removal, red-eye-removal,
restore-photo, passport-photo, colorize, enhance-faces, image-to-base64)
- Add 12 missing non-tool endpoints (analytics, features, audit-log,
roles, admin-health)
- Add typed error schemas for 401/403/409 responses
- Add descriptions to all path parameters
- Bump version from 0.9.0 to 1.15.9
Documentation:
- Fix 8 incorrect env var defaults in configuration guide
- Add 15 undocumented env vars to configuration guide
- Fix tool ID mismatch (color-adjustments -> adjust-colors)
- Add 4 new API sections (Roles, Audit Log, Analytics, Features)
- Add image-enhancement to AI engine reference
- Update AI tool count from 13 to 14 across all docs
- Add 6 missing doc links to README
2026-04-23 20:26:58 +08:00
ashim-hq
efb429289d
test: add QA release report from multi-node test sweep
...
280 tests across 3 nodes (Mac, WSL GPU RTX 4070, Ubuntu CPU):
- 270 pass, 7 fail (known platform limitations)
- Fixed: MAX_USERS=0 registration block, auth Zod validation
- Verified: cross-platform parity for all non-AI tools
- Verified: 16/18 input formats, all batch/pipeline operations
- GPU vs CPU AI performance benchmarked
2026-04-23 20:26:48 +08:00
ashim-hq
72a9aac445
feat: API sync and documentation audit - 100% endpoint coverage
...
Code quality:
- Add Zod validation to 14 route handlers that used raw JSON.parse
(favicon, find-duplicates, barcode-read, upscale, blur-faces,
erase-object, colorize, enhance-faces, red-eye-removal,
remove-background/effects, auth, api-keys, roles, teams,
analytics, settings, user-files)
- Standardize error responses to safeParse + formatZodErrors pattern
- Replace unsafe `as` type casts with schema validation
OpenAPI spec (89 -> 115 operations):
- Add 14 missing tool endpoints (adjust-colors, sharpening,
optimize-for-web, image-enhancement, noise-removal, red-eye-removal,
restore-photo, passport-photo, colorize, enhance-faces, image-to-base64)
- Add 12 missing non-tool endpoints (analytics, features, audit-log,
roles, admin-health)
- Add typed error schemas for 401/403/409 responses
- Add descriptions to all path parameters
- Bump version from 0.9.0 to 1.15.9
Documentation:
- Fix 8 incorrect env var defaults in configuration guide
- Add 15 undocumented env vars to configuration guide
- Fix tool ID mismatch (color-adjustments -> adjust-colors)
- Add 4 new API sections (Roles, Audit Log, Analytics, Features)
- Add image-enhancement to AI engine reference
- Update AI tool count from 13 to 14 across all docs
- Add 6 missing doc links to README
2026-04-23 19:35:40 +08:00
ashim-hq
9a2371053a
feat: add licensing page with AGPL-3.0 and commercial license tiers
2026-04-23 19:34:25 +08:00
ashim-hq
d588f5fd93
feat: redesign navbar with Features, Download, API, Pricing, Docs, About, Contact links, GitHub star button, and Book a Demo CTA
2026-04-23 18:32:26 +08:00
ashim-hq
0c40c4dcfc
fix: add suppressHydrationWarning to body for Dark Reader compatibility
2026-04-23 18:29:48 +08:00
ashim-hq
8f6600f55e
feat: add Why Choose SnapOtter section, expand hero animation phrases
2026-04-23 18:28:05 +08:00
ashim-hq
3e6001ec09
feat: add no signups, unlimited use, works offline to hero phrases
2026-04-23 18:25:36 +08:00
ashim-hq
44f015a8ce
fix: remove artificial limits from Pipelines description, now unlimited
2026-04-23 18:24:01 +08:00
ashim-hq
6f728fe629
feat: add Three Ways to Use and Industry Use Cases sections
2026-04-23 18:22:22 +08:00
ashim-hq
97a8d54ba7
fix: rewrite enterprise subtitle to be clearer and not misleading
2026-04-23 18:19:03 +08:00
ashim-hq
13a15edc26
fix: remove AI badge from tool cards
2026-04-23 18:18:45 +08:00
ashim-hq
c6196daf54
feat: remove Value Props section
2026-04-23 18:17:47 +08:00
ashim-hq
dbbc35040d
feat: add mouse-responsive parallax to hero background, gradient separator on navbar
2026-04-23 18:15:17 +08:00
ashim-hq
e6d6019d0a
fix: add subtle frosted background to navbar for readability over word cloud
2026-04-23 18:12:44 +08:00
ashim-hq
82e5e9cf90
fix: make navbar transparent to blend with hero, push word cloud below navbar
2026-04-23 18:11:05 +08:00
ashim-hq
b3a19fffea
feat: add tool name word cloud background to hero section
2026-04-23 18:09:28 +08:00
ashim-hq
1a353123d8
feat: add clear tagline to hero section
2026-04-23 18:07:27 +08:00
ashim-hq
60a821357c
feat: restore animated phrase rotation without blinking cursor bar
2026-04-23 18:05:43 +08:00
ashim-hq
8ff4155186
feat: replace typing cursor with static subtitle, add gradient mesh hero background
2026-04-23 18:04:53 +08:00
ashim-hq
c9f648708e
fix: remove all em dashes from landing page copy
2026-04-23 17:58:43 +08:00
ashim-hq
c9d536c561
feat: add Lucide icons to all 47 tools with BentoPDF-style card layout
2026-04-23 17:57:11 +08:00
ashim-hq
49f18847f0
feat: update hero headline, replace bento grid with searchable 47-tool showcase
2026-04-23 17:51:32 +08:00
ashim-hq
a6b79a7972
fix: redesign bento grid with hero AI card, fix navbar icon bug, suppress hydration warning
2026-04-23 17:45:51 +08:00
ashim-hq
984aebc601
feat: add OG image and complete meta tags
2026-04-23 17:31:17 +08:00
ashim-hq
b307005469
feat: assemble all sections into landing page
2026-04-23 17:30:11 +08:00
ashim-hq
a8988c0742
feat: add API Callout, Open Source, and Footer sections
2026-04-23 17:28:41 +08:00
ashim-hq
f7348ee82d
feat: add Enterprise and How It Works sections
2026-04-23 17:26:44 +08:00
ashim-hq
42fc8c5c80
feat: add Value Props and Bento Grid sections
2026-04-23 17:25:11 +08:00
ashim-hq
64f3e3f792
feat: add Navbar and Hero sections
2026-04-23 17:23:09 +08:00
ashim-hq
d22e4c2596
feat: add FadeIn and TypingCursor utility components
2026-04-23 17:21:22 +08:00
ashim-hq
2260d696bc
feat: scaffold Next.js landing page app at apps/landing
2026-04-23 17:19:48 +08:00
Ashim and GitHub
136a4dd641
Merge pull request #93 from ashim-hq/test/comprehensive-coverage
...
test: comprehensive test coverage expansion (+965 tests, 48/48 tools)
2026-04-23 17:12:53 +08:00
ashim-hq
babca4cf97
test: comprehensive test coverage expansion (+965 tests)
...
Add 42 new test files covering all untested tool routes, image engine
internals, AI sidecar bridge, Zustand stores, and cross-format
compatibility. Expand e2e-docker suite with 7 spec files covering all
48 tools against a real Docker container.
Unit tests:
- Image engine: format detection, MIME mapping, metadata parsing, pipeline
- AI bridge: sidecar lifecycle, all 11 tool functions (mocked)
- Web stores: 14 Zustand stores (collage, settings, features, analytics, etc.)
- API helpers: format decoders, page range, file validation
Integration tests:
- 25 tool routes that had zero dedicated tests
- Cross-format matrix: 17 input formats x 3 tools
- Edge cases: zero-byte files, corrupted headers, path traversal, XSS, SQL injection
- Concurrent request handling and pipeline edge cases
E2E-Docker (Playwright against real container):
- 7 spec files: essential, adjustment, conversion, creative, utility, AI, pipeline
- Custom buildMultipart helper for multi-file tool uploads
- AI tools gracefully skip when sidecar not installed
Fixtures:
- Organized test media: formats/ (18 formats) + content/ (17 content types)
- Reduced from 3.1 GB unorganized samples to 33 MB structured fixtures
Bug fix:
- color-adjustments: gamma exposure used invalid single-param gamma() for
positive values; fixed to use two-param gamma(gammaIn, gammaOut) form
2026-04-23 17:12:02 +08:00
Ashim and GitHub
9ff23f38fb
Merge pull request #92 from ashim-hq/fix/auth-false-escalation-90
...
fix: prevent admin escalation when AUTH_ENABLED=false
2026-04-23 14:46:20 +08:00
ashim-hq
7047ce5fae
fix: prevent admin escalation when AUTH_ENABLED=false
...
When auth was disabled, users could log out, reach the login page,
and authenticate with the default admin/admin credentials to gain
full admin privileges — defeating the purpose of AUTH_ENABLED=false.
Defense-in-depth fix across five layers:
- Skip ensureDefaultAdmin() when auth is disabled (no admin user seeded)
- Return 403 from POST /api/auth/login when auth is disabled
- Return synthetic anonymous user from GET /api/auth/session when auth is disabled
- Hide logout button in settings when auth is disabled
- Redirect /login and /change-password to / via AuthGuard when auth is disabled
Closes #90
2026-04-23 14:45:04 +08:00
ashim-hq
19df740880
docs: add Code of Conduct and community guide for GitHub Discussions
...
Establishes Contributor Covenant 2.1 as the project Code of Conduct with
reporting to ashim.hq@gmail.com . Adds a community guide with the 5-category
Discussions layout, a pinned Welcome post draft, and seed post ideas.
2026-04-23 12:57:47 +08:00
ashim-hq
949ac5d15a
docs: add SECURITY.md with vulnerability reporting, hardening checklist, and shared responsibility model
2026-04-23 12:49:44 +08:00
Ashim and GitHub
47376b1664
Merge pull request #91 from ashim-hq/feat/analytics
...
feat: production-grade opt-in product analytics with PostHog and Sentry
2026-04-23 12:40:08 +08:00
ashim-hq
d973ab61ee
fix: robust auth setup and login helpers for E2E analytics tests
2026-04-23 12:08:03 +08:00
ashim-hq
d6a977e149
fix: use full page reload after consent to avoid AuthGuard race condition
2026-04-23 11:19:31 +08:00
ashim-hq
d543141d19
fix: prevent hydration effect from overwriting user consent actions
2026-04-23 11:14:48 +08:00
ashim-hq
fc059c751d
test: comprehensive analytics test suite — unit, API, E2E, air-gapped
2026-04-23 10:58:56 +08:00
ashim-hq
de7b353871
fix: analytics E2E tests for post-auth-setup consent state
...
The auth setup project accepts analytics consent for the admin user
before tests run. The E2E tests incorrectly expected the consent page
to appear on subsequent logins. Fixed by:
- analytics-consent: verify home loads without consent redirect instead
of expecting the consent page to appear
- analytics-privacy-policy: use getByRole("link") for PostHog/Sentry
links to avoid matching multiple elements with getByText
- analytics-no-data-leak: use page.evaluate with in-browser auth token
to toggle analytics via API instead of separate login calls that hit
the rate limiter; handle both "/" and "/analytics-consent" post-login
2026-04-23 10:51:58 +08:00
ashim-hq
e46356c4d5
fix: hydrate analytics store from session data on login
2026-04-23 10:08:24 +08:00
ashim-hq
7275e4bfaa
fix: AuthGuard checks analytics store for real-time consent state
2026-04-23 10:06:46 +08:00
ashim-hq
9724e5229c
test: add comprehensive E2E Playwright tests for analytics feature
...
Covers consent flow, API endpoints, privacy/no-data-leak verification,
disabled-server behavior, settings toggle, and privacy policy page.
2026-04-23 09:59:41 +08:00
ashim-hq
3ef52d0aa9
feat: set PostHog and Sentry default keys for analytics
2026-04-23 00:29:22 +08:00
ashim-hq
9ad94f3d54
docs: update README analytics statement
2026-04-22 19:16:01 +08:00