Commit Graph
100 Commits
Author SHA1 Message Date
valknarandClaude Sonnet 4.6 cac75041db fix: remove SVG from image conversion options in media tool
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 17:23:01 +01:00
valknarandClaude Sonnet 4.6 fbaefbf5b8 fix: replace misleading 'Data collected' stat with 'Browser-first'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 16:50:11 +01:00
valknarandClaude Sonnet 4.6 075aa0b6c5 refine: landing page and 404 for clean consistent look
Hero: Kit. title with primary dot, arrow-down CTA, minimal line scroll
indicator. Stats: rounded-2xl + icon border matching cards. ToolsGrid:
proper h2 with gradient accent word. ToolCard: visible rest border,
radial glow, bigger icon+arrow. Footer: visible Source label, consistent
border. 404: fade gradient number, divider line, rounded-xl CTA.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 16:48:04 +01:00
valknarandClaude Sonnet 4.6 20406c5dcf feat: stamp+glitch logo animation, move keyframes outside @theme
logoStamp and pathFlicker defined at global CSS scope (outside @theme)
so they are always emitted. Logo uses sharp stamp+bounce entrance with
flickering path reveals.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 16:38:28 +01:00
valknarandClaude Sonnet 4.6 7424c2e899 chore: remove framer-motion, replace Logo animations with CSS
Use scaleIn/fadeIn keyframes from globals.css for the SVG entrance
animation and path group fade-ins.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 16:31:38 +01:00
valknarandClaude Sonnet 4.6 547753772c feat: style Sonner toasts to match glassmorphic app theme
Drop richColors, apply dark glass background with subtle per-type
border tints (primary/success, red/error, amber/warning, blue/info).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 16:28:47 +01:00
valknarandClaude Sonnet 4.6 16e1ce4558 fix: reduce MobileTabs button padding from py-2.5 to py-1.5
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 16:16:47 +01:00
valknarandClaude Sonnet 4.6 d476ffb613 refactor: extract MobileTabs shared component, replace in all 8 tools
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 16:14:56 +01:00
valknarandClaude Sonnet 4.6 b5f698cf29 fix: reduce main layout height offset from 180px to 120px across all tools
Also restore scroll handling to ExportPanel and PresetLibrary, and
remove maxHeight cap from CodeSnippet in ExportPanel.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 16:05:14 +01:00
valknarandClaude Sonnet 4.6 25067bca30 fix: stack units input row on mobile for better usability
Value input now takes full width on its own row; unit selects and
swap button sit on a separate row below, each taking equal flex space.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:41:40 +01:00
valknarandClaude Sonnet 4.6 c545211cf7 refactor: use CodeSnippet in color ExportMenu, drop inline copy button
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:13:41 +01:00
valknarandClaude Sonnet 4.6 11d4207f72 fix: adjust comment style pill padding and AnimationEditor layout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:08:22 +01:00
valknarandClaude Sonnet 4.6 6d6505e5dc fix: reduce ExportPanel code snippet maxHeight to 13rem
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 14:04:17 +01:00
valknarandClaude Sonnet 4.6 19cc44c102 fix: add scrollbar-thin to CodeSnippet pre element
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 13:52:05 +01:00
valknarandClaude Sonnet 4.6 002edc1532 refactor: extract CodeSnippet to shared ui component
Move components/favicon/CodeSnippet.tsx → components/ui/code-snippet.tsx.
Update Favicon tool import path. Replace Animate tool's local CodeBlock
(with external copy/download buttons) with the shared CodeSnippet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 13:42:12 +01:00
valknarandClaude Sonnet 4.6 56c0d6403c refactor: go fully native — remove all remaining shadcn component usage
Replace shadcn Select → native <select>:
- ascii/FontPreview.tsx: comment-style picker → glass pill wrapper
  with MessageSquareCode icon + native select
- color/ExportMenu.tsx: format + color-space pickers → native select
  with shared selectCls
- units/MainConverter.tsx: from/to unit pickers → native select

Delete dead code:
- components/media/FormatSelector.tsx (not imported anywhere,
  used shadcn Input + Label + Card)
- components/ui/select.tsx  — now unused
- components/ui/input.tsx   — now unused
- components/ui/label.tsx   — now unused
- components/ui/card.tsx    — now unused

Remaining components/ui/:
  slider.tsx, tooltip.tsx (TooltipProvider in Providers.tsx),
  slider-row.tsx, color-input.tsx

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 13:25:02 +01:00
valknarandClaude Sonnet 4.6 a0a0e6eaef chore: delete 10 unused shadcn UI components
Removed (0 imports anywhere in the codebase):
skeleton, empty, progress, dialog, button, badge,
tabs, textarea, toggle, toggle-group

Remaining (still actively imported):
slider (SliderRow + ManipulationPanel + QROptions)
tooltip (Providers.tsx — TooltipProvider)
select (ASCII FontPreview, Color ExportMenu, Units MainConverter)
input, label, card (Media FormatSelector)
color-input, slider-row (shared custom primitives)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 13:20:55 +01:00
valknarandClaude Sonnet 4.6 8a909bc8aa fix: stack favicon color pickers vertically instead of side by side
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 13:17:39 +01:00
valknarandClaude Sonnet 4.6 998ac641f9 refactor: externalize shared primitives, remove shadcn mixing in tools
Shared components (components/ui/):
- slider-row.tsx: SliderRow — label + display value + Slider, replaces
  inline slider blocks in FileConverter, QROptions
- color-input.tsx: ColorInput — color swatch + hex text input pair,
  replaces repeated inline patterns in QROptions, KeyframeProperties,
  FaviconGenerator

Media tool (FileConverter.tsx):
- Remove all shadcn Select/SelectTrigger/SelectContent/SelectItem
- Replace with native <select> + selectCls (matches AnimationSettings
  and all other tools)
- Use SliderRow for video/audio bitrate and image quality sliders
- Net: -6 shadcn Select trees, consistent with every other tool

QROptions.tsx:
- Use SliderRow for margin slider (remove raw Slider import)
- Use ColorInput for foreground + background color pairs

KeyframeProperties.tsx:
- Use ColorInput for background color pair (keep local SliderRow which
  has a different layout with number input)

FaviconGenerator.tsx:
- Use ColorInput for background + theme color pairs

AnimationSettings.tsx:
- Remove dead bg-[#1a1a2e] per-option className (global CSS handles
  select option styling via bg-popover)

Delete:
- components/media/ConversionOptions.tsx — dead code (no imports),
  contained the shadcn Label/Input/Select/Slider patterns being replaced

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 13:08:58 +01:00
valknar 1276a10e9a fix: keyframe timeline 2026-03-01 12:46:00 +01:00
valknar f9db58122c fix: app page layout 2026-03-01 12:20:15 +01:00
valknar 2abbdf407f fix: app page layout 2026-03-01 12:14:55 +01:00
valknar dc638ac4d3 chore: cleanup 2026-03-01 10:31:41 +01:00
valknar 9390c27f44 chore: cleanup 2026-03-01 10:20:00 +01:00
valknar db37fb1ae2 fix: calculate 2026-03-01 10:11:52 +01:00
valknar e12cc6592e fix: landing page stats grid 2026-03-01 10:04:30 +01:00
valknar 00c77ff3fe fix: remove heading and description 2026-03-01 10:01:28 +01:00
valknarandClaude Sonnet 4.6 a4cc53d774 polish: make tool cards and landing page more prominent
ToolCard: larger icon (w-11 h-11) with violet glow on hover, top shimmer
accent line, primary-tinted badges, arrow in glass pill, stronger border/
shadow on hover, all badges shown, overflow-hidden for clean rendering

ToolsGrid: gap-4, section heading with module count callout, max-w-5xl

Stats: align to max-w-5xl, horizontal layout per stat (icon + value/label),
rounder icon container w-9 h-9

Hero: warm up CTA button with ambient bg-primary/[0.07] fill at rest

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 09:41:32 +01:00
valknarandClaude Sonnet 4.6 37874e3eea polish: shorten hero description copy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 09:09:00 +01:00
valknarandClaude Sonnet 4.6 9126589de3 refactor: align landing page and 404 with Calculate blueprint
- Hero: remove framer-motion, CSS stagger animations, glass pill CTA button, refined typography and scroll indicator
- Stats: remove framer-motion, Lucide icons, tighter glass cards with mono labels
- ToolsGrid: remove framer-motion, editorial section heading, 4-col xl grid
- ToolCard: replace framer-motion motion.Link with plain Link + CSS hover, compact layout (icon→title→desc→badges+arrow), ElementType icon prop
- Footer: remove framer-motion, matches sidebar footer style
- BackToTop: remove framer-motion, JS scroll progress bar (1px primary line), compact glass button
- not-found: remove framer-motion and shadcn Button, glass pill CTA, 120px mono 404, CSS stagger
- page.tsx: remove unnecessary 'use client' directive

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 09:07:18 +01:00
valknarandClaude Sonnet 4.6 413c677173 refactor: align layout chrome with glass blueprint
AppHeader:
- Remove shadcn Button → native 8×8 rounded glass icon buttons
- Shrink to h-14 (from h-16) to match sidebar header
- Add current tool name breadcrumb (navTitle) next to collapse toggle;
  shows context when sidebar is collapsed or on mobile

AppSidebar:
- Remove shadcn Button → native button for mobile close
- Sidebar narrows to w-60 (from w-64); matches h-14 header
- Active state: slim absolute left-bar (0.5px) replaces harsh border-l-2;
  bg-primary/10 tint kept; no border on the link itself
- Nav item text refined: 13px font-medium title + 9px mono description
- Border opacity drops to border-border/20 throughout (from border-border)
- Footer: smaller mono text, lighter icon opacity

AppPage:
- Shrink from py-8 / text-2xl to py-5 / text-lg font-semibold
- Icon wrapped in 7×7 glass pill (bg-primary/10) matching tool cards
- Description moved inline under title as 10px mono, truncated
- border-b border-border/20 separator between header and tool content

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 08:58:33 +01:00
valknarandClaude Sonnet 4.6 002fa037b7 refactor: merge keyframes/export/presets into one tabbed card
Right column now has two elements: preview canvas (shrink-0) and a
single glass card with Keyframes|Export|Presets tabs (flex-1).
Defaults to Keyframes tab. Removes the standalone timeline card and
the redundant embedded timeline in the mobile edit panel.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 08:52:55 +01:00
valknarandClaude Sonnet 4.6 ea464ef797 refactor: align animate tool with Calculate/Media blueprint
Layout:
- AnimationEditor: lg:grid-cols-5 (2/5 edit, 3/5 visual); full viewport
  height; mobile Edit|Preview glass pill tabs; timeline embedded in edit
  panel on mobile, standalone on desktop; Export|Presets custom tab
  panel at the bottom of the right column

Components (all shadcn removed):
- AnimationSettings: Card/Label/Input/Select/Button → native inputs;
  direction & fill mode as 4-pill selectors; easing as native <select>;
  ∞ iterations as icon pill toggle
- AnimationPreview: Card/ToggleGroup/Button → glass card; speed pills
  as inline glass pill group; element picker as compact icon pills;
  playback controls as glass icon buttons; subtle grid bg on canvas
- KeyframeTimeline: Card/Button → glass card; embedded prop for
  rendering inside another card on mobile without double glass
- KeyframeProperties: Card/Label/Input/Button → bare content section;
  SliderRow uses native number input; bg color toggle as pill button
- ExportPanel: Card/Tabs/Button → bare section; CSS|Tailwind custom
  tab switcher; dark terminal (#06060e) code blocks
- PresetLibrary: Card/Tabs → bare section; category pills replace Tabs;
  preset cards use glass border-border/20 bg-primary/3 styling

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 08:48:35 +01:00
valknarandClaude Sonnet 4.6 50cf5823f9 refactor: align QR code tool with Calculate/Media blueprint
- QRCodeGenerator: lg:grid-cols-5 layout (2/5 options, 3/5 preview);
  full viewport height; mobile Configure|Preview glass pill tabs
- QRInput: remove shadcn Textarea/Card; native <textarea> in glass panel
  section; character counter in monospace
- QROptions: remove shadcn Card/Label/Input/Button/Select; EC level as
  4 pill buttons with recovery % label; native color inputs + pickers;
  transparent toggle as small pill; keep shadcn Slider for margin
- QRPreview: remove shadcn Card/Button/Skeleton/ToggleGroup/Tooltip/Empty;
  glass card fills full height; PNG button with inline size pill group
  (256/512/1k/2k); empty state and pulse skeleton match other tools

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 08:37:39 +01:00
valknarandClaude Sonnet 4.6 7da20c37c1 fix: move generate button into App Details card, stretch to full height
App Details card is now flex-1 min-h-0 so it fills the remaining left
column height, matching the right panel. Generate/Reset buttons are
pinned at the bottom of the card with a border-t divider.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 08:33:28 +01:00
valknarandClaude Sonnet 4.6 4927fb9a93 refactor: align favicon tool with Calculate/Media blueprint
- FaviconGenerator: lg:grid-cols-5 layout (2/5 setup, 3/5 results);
  glass panels, native inputs, custom tab switcher (Icons/HTML/Manifest),
  native progress bar, empty state placeholder, mobile Setup|Results tabs
- FaviconFileUpload: remove shadcn Button; match media FileUpload styling
  with file card, metadata chips (size, dimensions)
- CodeSnippet: remove shadcn Button; dark terminal (#06060e) with hover
  copy button, consistent with ASCII/ExportMenu code blocks

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 08:30:56 +01:00
valknarandClaude Sonnet 4.6 2763b76abe refactor: refactor media tool to match calculate blueprint
Rewrites all three media components to use the glass panel design
language, fixed-height two-panel layout, and glass action buttons.

- FileConverter: lg:grid-cols-5 split — left 2/5 is the upload zone;
  right 3/5 has output format pill grid + codec/quality options +
  convert/reset buttons + scrollable results panel; mobile 'Upload |
  Convert' tab switcher auto-advances on file selection; removed all
  Card/Button/Label/Input shadcn imports; keeps Select+Slider for
  codec/quality controls
- FileUpload: large flex-1 drop zone fills the left panel; file list
  shows glass item cards with metadata chips; native buttons; removes
  shadcn Button dependency
- ConversionPreview: glass card replaces Card; native progress bar
  (div with bg-primary/65) replaces shadcn Progress; size reduction
  shown as emerald/muted badge; media previews in dark-bordered
  containers; all buttons are glass action buttons

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 08:22:17 +01:00
valknarandClaude Sonnet 4.6 0727ec7675 refactor: refactor color tool to match calculate blueprint
Rewrites all color components to use the glass panel design language,
fixed-height two-panel layout, and tab-based navigation.

- ColorManipulation: lg:grid-cols-5 split — left 2/5 shows ColorPicker
  + ColorInfo always; right 3/5 has Info/Adjust/Harmony/Gradient tabs;
  mobile 'Pick | Explore' switcher
- ColorPicker: removes shadcn Input/Label, native input with dynamic
  contrast color matching the picked hue
- ColorInfo: removes shadcn Button, native copy buttons on hover,
  metadata chips with bg-primary/5 background
- ManipulationPanel: keeps Slider, replaces Button with glass action
  buttons, tighter spacing and muted labels
- ExportMenu: keeps Select, replaces Buttons with glass action buttons,
  code preview in dark terminal box (#06060e)
- ColorSwatch: rectangular full-width design for palette grids,
  hover reveals copy icon, hex label at bottom
- PaletteGrid: denser grid (4→5 cols), smaller swatch height

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 08:15:33 +01:00
valknar 50dc009fdf fix: use bg-popover for search dropdown (glass is near-transparent) 2026-03-01 08:02:35 +01:00
valknar d8a568076d fix: use Tailwind class for bar fill (--primary is hex, not HSL) 2026-03-01 08:00:32 +01:00
valknarandClaude Sonnet 4.6 7eb28851b7 refactor: refactor units tool to match calculate blueprint
Rewrites all three units components to use the same glass panel
layout, lg:grid-cols-5 two-panel split, and interactive patterns
established by the calculate tool.

- MainConverter: category sidebar (left 2/5) replaces Select dropdown;
  converter card + scrollable conversion grid (right 3/5); mobile
  'Category | Convert' tab switcher; clickable conversion cards set
  target unit; glass Grid/Chart toggle
- SearchUnits: native input with glass border, glass dropdown panel,
  compact result rows matching font selector style
- VisualComparison: polished gradient bars, tighter spacing, cleaner
  value display; all drag logic preserved

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 07:57:29 +01:00
valknarandClaude Sonnet 4.6 141ab1f4e3 refactor(ascii): align layout and UX with Calculate blueprint
Rewrites all four ASCII tool components to share the same design
language and spatial structure as the Calculator & Grapher tool.

Layout
- New responsive 2/5–3/5 grid (was fixed 2+1 col); matches Calculate
- Left panel: text input card + font selector filling remaining height
- Right panel: preview as the dominant full-height element
- Mobile: tabbed Editor / Preview switcher (same pattern as Calculator)

TextInput
- Replace shadcn Textarea with native <textarea>
- Glass border pattern (border-border/40, focus:border-primary/50)
- Monospace font, consistent counter styling

FontSelector
- Replace Card + shadcn Tabs + Button + Input + Empty with native elements
- Glass panel (glass rounded-xl) matching Calculate panel style
- Custom tab strip mirrors Calculator mobile tab pattern
- Native search input with glass border
- Font list items: border-l-2 left accent for selected state,
  hover:bg-primary/8, rose heart for favorites
- Auto-scrolls selected item into view on external changes
- Simplified empty state to single italic line

FontPreview
- Replace Card + Button + Badge + ToggleGroup + Tooltip + Empty
- Glass panel with header row (label + font tag + action buttons)
- Controls row: native toggle buttons with primary/10 active state
- Terminal window: dark #06060e background, macOS-style chrome
  (rose/amber/emerald dots), font name watermark — the hero element
- PNG export captures entire terminal including chrome at 2x
- Inline skeleton loader with pulse animation replaces Skeleton import

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 07:46:21 +01:00
valknarandClaude Sonnet 4.6 d161aeba72 docs: update README with Calculate tool and 8-tool count
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 20:48:31 +01:00
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