Commit Graph
100 Commits
Author SHA1 Message Date
valknarandClaude Sonnet 4.6 9efa783ca3 feat: add Calculator & Grapher tool
Adds a full-featured mathematical calculator and interactive function
grapher at /calculate. Powered by Math.js v15 with a HiDPI Canvas
renderer for the graph.

- Evaluates arbitrary math expressions (trig, log, complex, matrices,
  factorials, combinatorics, and more) with named variable scope
- Persists history (50 entries) and variables via localStorage
- 32 quick-insert buttons for constants and functions
- Interactive graph: pan (drag), zoom (scroll), crosshair tooltip
  showing cursor coords and f₁(x)…f₈(x) values simultaneously
- Up to 8 color-coded functions with inline color pickers and
  visibility toggles
- Discontinuity detection for functions like tan(x)
- Adaptive grid labels that rescale with zoom
- Responsive layout: 2/5–3/5 split on desktop, tabbed on mobile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 20:44:53 +01:00
valknarandClaude Sonnet 4.6 aa890a0d55 docs: update README with all 7 tools and current project structure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 20:16:07 +01:00
valknarandClaude Sonnet 4.6 e4fafeb7b7 refactor: replace generic badges with tool-specific ones
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:58:05 +01:00
valknarandClaude Sonnet 4.6 83f071ec6b feat: animate heart icon, dynamic tools count in stats, trim tool summaries
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:53:33 +01:00
valknarandClaude Sonnet 4.6 d6e01e4bf5 fix: make all tool grid cards the same height
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:53:02 +01:00
valknarandClaude Sonnet 4.6 36c02cea55 polish: unit labels in parentheses, export panel styling, remove unused gradient utilities
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:38:48 +01:00
valknarandClaude Sonnet 4.6 0f5e67a007 fix: remove duplicate className attribute in AnimationSettings cubic-bezier labels
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:35:57 +01:00
valknarandClaude Sonnet 4.6 d0e8ae322f style: move units into label text in KeyframeProperties SliderRow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:33:03 +01:00
valknarandClaude Sonnet 4.6 0e95b7e543 fix: track animation ended state and wire preview controls correctly
- Replace boolean paused with AnimState ('playing'|'paused'|'ended')
- Use onAnimationEnd to detect when finite animations finish
- Play re-enables after end and restarts the animation (replay)
- Pause only active while playing; Restart always available
- Config changes auto-restart preview so edits are instantly visible

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:17:20 +01:00
valknarandClaude Sonnet 4.6 27c7372a31 style: match ToggleGroup style to QR preview (outline variant, h-6 compact items)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:13:47 +01:00
valknarandClaude Sonnet 4.6 1a517c4655 style: replace speed Select with ToggleGroup in AnimationPreview
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:12:04 +01:00
valknarandClaude Sonnet 4.6 f4ee557e26 fix: preset thumbnails no longer conflict with main preview animation
- Inject only @keyframes (not .animated class rule) per preset thumbnail
  so the main preview's .animated rule cannot override them
- Drive thumbnail animation entirely via inline style properties
- Remove isActive/currentName — presets should never appear selected

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:08:22 +01:00
valknarandClaude Sonnet 4.6 eeef3283c8 feat: add CSS Animation Editor tool
Comprehensive visual editor for CSS @keyframe animations:
- AnimationSettings: name, duration, delay, easing (incl. cubic-bezier), iteration, direction, fill-mode
- KeyframeTimeline: drag-to-reposition keyframe markers, click-track to add, delete selected
- KeyframeProperties: per-keyframe transform (translate/rotate/scale/skew), opacity, background-color, border-radius, blur, brightness via sliders
- AnimationPreview: live preview on box/circle/text element with play/pause/restart and speed control (0.25×–2×)
- PresetLibrary: 22 presets across Entrance/Exit/Attention/Special categories with animated thumbnails
- ExportPanel: plain CSS and Tailwind v4 @utility formats with copy and download

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 14:17:04 +01:00
valknar 4a0aa85859 fix: popover color 2026-02-28 13:46:36 +01:00
valknarandClaude Sonnet 4.6 6a586b936a style: replace emoji heart with primary Heart icon and polish Valknar link
- Swap 💜 for a filled Lucide Heart icon in text-primary in both Footer and AppSidebar
- Style Valknar link with animated underline (decoration-primary on hover)
- Add sidebar footer with copyright, Heart, Valknar link, and GitFork source link
- Add author field to package.json

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 12:20:28 +01:00
valknar 0d731e56da fix: sidebar bg opacity 2026-02-28 12:01:37 +01:00
valknarandClaude Sonnet 4.6 c9c7d22766 seo: add meta description (tool.summary) to all tool pages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 10:34:42 +01:00
valknarandClaude Sonnet 4.6 bc9e30c918 style: constrain description width in AppPage; add description to sidebar items
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 10:01:33 +01:00
valknarandClaude Sonnet 4.6 28747a6c8f refactor: extract ColorManipulation component and pass icon/summary to AppPage
- Rename ColorPage → ColorManipulation (no AppPage wrapper inside)
- Move AppPage + title/description/icon to color/page.tsx, consistent with other tools
- AppPage now accepts icon prop directly; removes internal usePathname lookup and 'use client'
- All tool pages pass tool.summary as description and tool.icon as icon

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 09:57:06 +01:00
valknar 82649f6674 fix: remove sidebar tool description 2026-02-28 09:09:16 +01:00
valknarandClaude Sonnet 4.6 f917891a31 feat: add QR code generator tool
Add a sixth tool with live SVG preview, customizable foreground/background
colors, error correction level, margin control, and export as PNG (256–2048px)
or SVG. URL params enable shareable state. All processing runs client-side
via the qrcode package.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 00:58:57 +01:00
valknarandClaude Opus 4.6 695ba434e2 feat: add comment wrapping to ASCII art tool
Add comment style selector (shadcn Select) to wrap generated ASCII art
with language-appropriate comment syntax (// # -- ; /* */ <!-- --> """).
Refactor preview controls to use shadcn ToggleGroup, Tooltip, and Badge.
Alignment is disabled when a comment style is active.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 19:11:25 +01:00
valknarandClaude Opus 4.6 a400f694fe refactor: externalize tool definitions and polish app shell
- Create lib/tools.tsx as single source of truth for all tool metadata
  (title, shortTitle, navTitle, description, summary, icon, etc.)
- Update AppSidebar to render nav from centralized tools list with
  descriptions, remove collapse footer button
- Update AppHeader with sidebar collapse toggle, tool short title,
  and app logo; remove breadcrumbs
- Update AppPage to auto-resolve tool icon from pathname
- Update ToolsGrid/ToolCard to use shared tools data, remove per-card
  gradients for uniform styling
- Add per-tool HTML title via metadata exports (title template in root
  layout)
- Style landing page and 404 headings with primary theme color
- Add Toolbox icon to hero CTA, GitFork icon link in footer
- Remove footer from error page and "View on Dev" buttons
- Extract ColorPage client component for RSC metadata compatibility

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 17:46:54 +01:00
valknar 5a0d1863ec chore: cleanup 2026-02-27 16:34:27 +01:00
valknar 83586c8bbb fix: export menu buttons size 2026-02-27 13:53:08 +01:00
valknar bd08951717 fix: popover color 2026-02-27 13:49:25 +01:00
valknar ee7e5ec06c refactor: streamline, refine and polish 2026-02-27 12:51:28 +01:00
valknar efe3c81576 chore: cleanup 2026-02-27 08:47:44 +01:00
valknar 782923f2e0 feat: refactor theme, add tailwind-scrollbar, and improve UI components
- Removed manual theme switching logic and ThemeProvider
- Installed and configured tailwind-scrollbar plugin
- Updated FileConverter and ConversionOptions to use shadcn Input
- Refactored FontSelector to use shadcn Tabs
- Simplified global styles and adjusted glassmorphic effects
2026-02-26 22:22:32 +01:00
valknar a3ef948600 docs: update README and GEMINI with favicon app and PWA info 2026-02-26 18:39:15 +01:00
valknar 283855d7a3 fix: icon.png size 2026-02-26 18:24:11 +01:00
valknar c8ff0e5dae fix(media): use processed inputFile for SVG conversion 2026-02-26 18:20:02 +01:00
valknar 8a9ff3582f fix(media): handle SVG inputs using browser Canvas pre-conversion for ImageMagick WASM 2026-02-26 18:15:41 +01:00
valknar f20cedffd5 feat: convert app to PWA with offline support and service worker 2026-02-26 18:01:33 +01:00
valknar 1d72f34b65 style: streamline media app upload component with favicon app styling 2026-02-26 17:52:41 +01:00
valknar 1f1b138089 feat: add Favicon Generator app with ImageMagick WASM support 2026-02-26 17:48:16 +01:00
valknar d99c88df0e fix(media): truncate long filename in download button 2026-02-26 17:12:27 +01:00
valknar 0db8ea8773 refactor: remove favorite and copy features from units converter 2026-02-26 12:40:03 +01:00
valknar e1406f427e refactor: rename figlet app to ascii and update all references 2026-02-26 12:31:10 +01:00
valknar 484423f299 refactor: rename pastel app to color and update all references 2026-02-26 12:19:22 +01:00
valknar 061ea1d806 feat: unify pastel application into single playground and remove standalone pages 2026-02-26 12:07:21 +01:00
valknar 225a9ad7fb fix: upload card 2026-02-25 21:44:34 +01:00
valknar 311d80bd41 fix: figlet text input card 2026-02-25 21:32:05 +01:00
valknar 84bc70b442 fix: ffmpeg import 2026-02-25 20:51:45 +01:00
valknarandCopilot 3a1e0153ac Update postinstall script for FFmpeg 0.12.10
Update the postinstall script to copy from the correct FFmpeg core version path.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-25 20:40:06 +01:00
valknarandCopilot 40214d9748 Upgrade FFmpeg to latest version (0.12.10)
Updated @ffmpeg/core from 0.12.6 to 0.12.10 and updated CDN URL references.
The newer version may have better Turbopack compatibility.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-25 20:39:18 +01:00
valknarandCopilot 87f1384175 Fix FFmpeg WASM loading: use CDN instead of local files
The 'Cannot find module as expression is too dynamic' error occurs at runtime
when FFmpeg tries to dynamically load the core module. Using CDN URLs bypasses
this bundler issue entirely since absolute URLs don't require bundler analysis.

Switched to jsdelivr CDN for FFmpeg core and WASM files - this is a proven
approach used by many projects.

Fixes: wasmLoader.ts runtime error on media conversion

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-25 20:36:45 +01:00
valknarandCopilot 6d4426037c Fix FFmpeg import: use direct import like ImageMagick
Import FFmpeg at module level instead of dynamic import. The build now
compiles cleanly without Turbopack bundler warnings.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-25 20:29:55 +01:00
valknarandCopilot 3a8b409d1d Fix FFmpeg WASM bundler error: use runtime import instead of static analysis
The @ffmpeg/ffmpeg package has internal dynamic imports that Turbopack
cannot statically analyze, but they work fine at runtime. This change
moves the import to the loadFFmpeg function where it's needed, allowing
Turbopack to skip static analysis and let the bundler resolve it at runtime.

Fixes: Cannot find module as expression is too dynamic error

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-25 20:27:53 +01:00
valknarandCopilot b5812c97b4 fix: handle FFmpeg dynamic import more gracefully
- lazy-load FFmpeg class to avoid static analysis issues
- add proper null checks for FFmpeg instance
- use initFFmpeg() helper to manage async initialization
- fixes bundler 'too dynamic' error with static-friendly approach

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-25 20:24:24 +01:00
valknarandCopilot 45a48abc91 fix: resolve FFmpeg WASM loader dynamic import error
- moved FFmpeg and initializeImageMagick imports to top level (static)
- removed dynamic imports that caused bundler analysis issues
- simplified ImageMagick initialization
- fixes: 'Cannot find module as expression is too dynamic' error

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-25 20:22:04 +01:00
valknar dd71130977 fix: conversion options styling 2026-02-25 20:20:04 +01:00
valknarandCopilot b560dcbc8e refactor: streamline media converter UI and layout
- consolidated file upload and metadata display in single card
- replaced complex FormatSelector with simple shadcn Select component
- inlined all conversion options without toggle display
- restructured layout to 2-column grid matching pastel app pattern:
  - left column: upload and conversion options
  - right column: conversion results
- removed unused components (FileInfo, FormatSelector, ConversionOptionsPanel)
- cleaned up imports and simplified component hierarchy

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-25 19:59:22 +01:00
valknar 56cdb1ae4a fix: remove media conversion presets 2026-02-25 19:20:22 +01:00
valknar 4668d771c1 style: remove emojis from media app format presets 2026-02-25 18:34:39 +01:00
valknar 4898ad942b style: remove emojis from media app quality presets 2026-02-25 18:30:23 +01:00
valknar 317a80dbad refactor: remove category colors from units app 2026-02-25 18:24:15 +01:00
valknar f28a2d1eab refactor: replace html range input with shadcn slider in batch operations 2026-02-25 18:18:03 +01:00
valknar 7eeb8399b3 refactor: externalize AppPage component and streamline all tool pages 2026-02-25 18:04:32 +01:00
valknar 71c22e465e refactor: replace html textarea with shadcn Textarea component 2026-02-25 16:20:25 +01:00
valknar 40e0b0e375 refactor: streamline TextInput classes with shadcn input 2026-02-25 16:13:10 +01:00
valknar 880bce157b style: improve light theme border and input visibility 2026-02-25 16:09:29 +01:00
valknar 2fb2eaa54c refactor: use Card, CardTitle and CardContent in Figlet and Units apps 2026-02-25 16:00:10 +01:00
valknar 4ccf316184 refactor: use shadcn Card component in pastel app 2026-02-25 13:35:29 +01:00
valknar 57ba63aa32 fix: update nginx fallback to properly serve custom 404 page 2026-02-25 11:49:39 +01:00
valknar 0732c9c5e2 feat: add custom 404 page and update nginx error handling 2026-02-25 11:46:37 +01:00
valknar 9bee255647 style: rename Pastel (Color) to Pastel in sidebar 2026-02-25 11:23:03 +01:00
valknar da7f60cf04 docs: update README with Media app information and project structure 2026-02-25 11:22:38 +01:00
valknar 5612176996 refactor: externalize app icons and update stats count 2026-02-25 11:14:24 +01:00
valknar 77e0114e96 refactor: load WASM from local assets via postinstall script 2026-02-25 10:52:59 +01:00
valknar 08e1cac3a0 feat: streamline WASM loading with local priority and cleanup UI 2026-02-25 10:44:49 +01:00
valknar 84cf6ecab0 feat: remove keyboard shortcuts from media app 2026-02-25 10:15:28 +01:00
valknar fbc8cdeebe feat: add media converter app and fix compilation errors 2026-02-25 10:07:25 +01:00
valknar 1da6168f37 fix: sidebar logo 2026-02-24 19:19:34 +01:00
valknar 5f46ba8c74 fix: breadcrumb root 2026-02-24 19:14:58 +01:00
valknar a604789285 fix: figlet cards padding 2026-02-24 19:05:22 +01:00
valknar 5d6ace4e46 fix: old styling with new shadcn components 2026-02-24 16:58:17 +01:00
valknar 9c6b184f7e refactor: update UI component usage to match latest shadcn APIs 2026-02-24 16:20:35 +01:00
valknar bf4729fa4d feat: integrate icon.png as favicon and remove legacy icon.svg 2026-02-24 15:27:16 +01:00
valknar d61add82cd feat: implement sort by hue for named colors using pastel-wasm 2026-02-24 10:45:00 +01:00
valknar d65a7c6c30 feat: remove statistics from Distinct Colors generator 2026-02-24 09:45:09 +01:00
valknar f779d4aa9d fix: remove color_spaces from CapabilitiesData to match implementation 2026-02-23 18:28:30 +01:00
valknar 3061260eec feat: remove colorspace option from pastel gradients (not supported by API) 2026-02-23 18:22:12 +01:00
valknar ab930a3279 fix: oklab string format and debounced color history 2026-02-23 17:52:06 +01:00
valknar 2d59f3aaca docs: update README and repository structure 2026-02-23 17:43:38 +01:00
valknar 4e7fc24582 chore: update icon and units description 2026-02-23 17:41:03 +01:00
valknar 906b0e081b feat: create app/icon.png from app/icon.svg 2026-02-23 17:33:12 +01:00
valknar 95b270810b feat: use NEXT_PUBLIC_SITE_URL and remove redundant preconnect 2026-02-23 17:21:46 +01:00
valknar b7d427023e feat: add Umami tracking support 2026-02-23 17:09:44 +01:00
valknar 4108ffc23f fix: app shell header logo display 2026-02-23 14:04:13 +01:00
valknar 43faed224f Feat: Refine UI and consolidate components
- Updated the heading in the Pastel page from 'Color Playground' to 'Pastel'.
- Adjusted the logo size in the Hero component for better visual balance.
- Removed duplicate/unused Footer components from pastel layout and ui directories.
2026-02-23 14:00:09 +01:00
valknar 5ab1387165 style: update Logo and Kit title styling in App Shell 2026-02-23 13:33:17 +01:00
valknar facb7e5161 style: remove outer margins and scale elements in app/icon.svg 2026-02-23 13:21:59 +01:00
valknar 90b045f349 style(figlet): update default text and remove search keyboard hint 2026-02-23 09:46:35 +01:00
valknar 6fbcdd3674 docs: generate comprehensive new README 2026-02-23 09:28:57 +01:00
valknar 8ce12c4c70 style(pastel): unify card title sizes with figlet 2026-02-23 09:25:51 +01:00
valknar fd2ada4438 refactor(pastel): remove keyboard shortcuts and useKeyboard hook 2026-02-23 08:41:32 +01:00
valknar 2160b9aaa0 style: unify keyboard shortcut hints across tools using Pastel style
- Add shortcut hints below tool descriptions in Figlet and Units pages
- Revert experimental button-based shortcut layout in Units
- Remove redundant shortcut hints from Units footer
- Ensure consistent kbd tag styling across the application
2026-02-23 08:27:26 +01:00
valknar 7806bcbede refactor: flatten Pastel routes by removing intermediate palettes and accessibility paths
- Move sub-routes from /pastel/palettes/* and /pastel/accessibility/* to direct children of /pastel
- Update AppSidebar navigation links
- Update Pastel Navbar and Footer links
- Update Tailwind source directives in pastel/globals.css
- Remove intermediate page files
2026-02-23 08:18:44 +01:00
valknar 3a100f8fde feat: move units search and category select to a row below description
- Relocate SearchUnits and Category Select into a dedicated row at the top of MainConverter
- Remove them from the converter card header for a cleaner layout
- Update vertical spacing for better visual hierarchy
2026-02-23 08:09:51 +01:00