Commit Graph

80 Commits

Author SHA1 Message Date
Doruk Kavcioglu b7f7b7e27e Add single-line redraw mode (handwriting/draw-on) beside mask-reveal
Redraw is the inverse of the existing mask-reveal solver: the visible stroke is
the artwork (Trim Paths write-on, no track matte, no fill layer), not a hidden
driver behind a preserved fill. Kept fully separate from the masking pipeline.

- references/single-line-redraw.md: when-to-use rules, reuse procedure (preserve
  Beziers), Lottie wiring skeleton, draw-order/style defaults, boundaries.
- scripts/redraw/build_redraw.py (+ README): stdlib; parses open stroked paths,
  preserves Bezier tangents, orders strokes L->R, emits a Lottie stroke+trim
  scene and a flat preview. No centerline/rail/skeleton work.
- SKILL.md: split the overloaded single-line routing row into mask-reveal +
  redraw (routing-only; no prose classifier). Masking files byte-identical.
- evals: new redraw routing + reference-loading entries (additive).
2026-06-29 20:52:16 +03:00
Doruk Kavcioglu da9e12209d Slim centerline solver: drop opt-in fillet machinery; keep sharp default + notch diagnostic
The corner-fillet stage (--fillet) no-ops on this solver's target marks — thin
folded-flag ribbons have margins too tight to absorb a de-notching arc — so its
~245 lines of bezier geometry were dormant. Remove it to fit a no-bloat OSS skill.

Removed: the 8 fillet helpers (plan_fillets, _arc_nodes, _dist_point_to_arc,
route_nodes, nodes_to_d, reverse_nodes, extend_node_caps, nodes_to_shape), the
--fillet / --fillet-* flags, the matte_shape route assembly, the fillet_report /
matte_shape JSON outputs, the green-filleted / magenta apex-clip SVG markers, and
the fillet prose in the three docs.

Kept (the cheap, always-on value): sharp/butt default for sharp/polygonal marks,
content-class round cap for curved marks, --linecap round as the opt-in softener,
and cap_decision.notch_risk_corners (+ grey SVG markers) so the agent can OFFER a
rounded reveal as a revision.

Behaviourally identical on every mark that didn't pass --fillet (i.e. the default
path): output is byte-identical to the prior commit's default except cap_decision.note
no longer mentions the removed flag. derive_rails.py 1175 -> 904 lines.
2026-06-28 23:35:40 +03:00
Doruk Kavcioglu aa43f7280c Make centerline corner-fillet opt-in; keep sharp/butt default + always-on notch diagnostic
The default reveal-matte cap stays butt (lc:1) for sharp/polygonal marks (round
lc:2 only for curved or --linecap round) and the miter join keeps settled corners
sharp — the default matte geometry is byte-identical to the pre-fillet route. Rounding
is now strictly opt-in.

- Fillet stage is opt-in via --fillet (off by default, was on). It no-ops on
  tight-margin folded-flag ribbons (the solver's primary marks), so it no longer
  runs unless asked; the bezier matte_shape/fillet_report are emitted only when it
  actually fillets a corner.
- Drop --force-fillet: it rounded the settled mark by clipping the fill (too
  aggressive for precise marks, and overlaps the lighter --linecap round).
- cap_decision + notch_risk_corners are now emitted on every run (cheap), so a default
  sharp run still reports which corners show a transient butt-cap notch — the trigger
  to OFFER --linecap round as a revision. The coverage SVG marks those corners grey in
  the default run too.
- Sync README, build_matte_snippet, single-line-vectorization to the opt-in wording.
2026-06-28 23:00:13 +03:00
Doruk Kavcioglu 2919bd484a Add margin-bounded corner fillet + content-class cap policy to centerline solver
Replace the blanket round-cap default and the centerline-fillet ban with a
per-corner, apex-safe policy in derive_rails.py:

- plan_fillets: margin-bounded fillet per interior corner, sized to erase the
  butt-cap notch (fillet_notch_frac) while staying within the apex-coverage
  radius (fillet_safety) and segment reach (fillet_seg_frac).
- Tip-coverage guardian: a fillet ships only when a measured check proves the
  convex apex stays covered; otherwise the corner is left sharp (reason
  "tight"/"apex-clip") and reported. Settled sharpness is never traded away.
- Content-class cap decision: butt (lc:1) default for sharp/polygonal marks,
  round (lc:2) only for curved/handwriting or --linecap round. Replaces the
  hardcoded matte_linecap:2.
- Filleted route emitted as route_decision.matte_shape {v,i,o,c:false} (bezier
  arcs); centerline_d uses C segments. matte_vertex_order(_raw) unchanged.
- centerline.svg overlay: decided cap + filleted arcs + green/grey/magenta
  corner markers (filleted / left-sharp / apex-clip).
- New flags: --no-fillet, --fillet-safety/-seg-frac/-notch-frac/-min, --linecap.

New keys (cap_decision, fillet_report, matte_shape) are gated so
`--no-fillet --linecap round` reproduces prior output byte-for-byte.

Docs (single-line-vectorization.md, build_matte_snippet.md, README.md) updated:
cap is now a decision, the precise fillet rule replaces the ban, and consumers
read matte_linecap/cap_decision and copy matte_shape verbatim.

Verified out-of-tree with gentle/sharp/curved ribbon fixtures + headless
canvaskit renders (gentle filleted+butt with sharp settled apexes; sharp
left-sharp+butt with the accepted transient notch that round-cap removes; curved
round-cap pen reveal; apex-clip guardian rejects oversized fillets). The fixtures
and render harness are kept as handback artifacts, not shipped in the skill.
2026-06-28 21:15:50 +03:00
Doruk Kavcioglu fe43d6307a Fix reveal-frontier corner notch: round cap on single-line reveal matte
The path-revealed matte for sharp filled marks notched at the moving frontier whenever the Trim frontier crossed an interior corner/fold (e.g. the Wise 7). Root cause: the leading butt cap (lc:1) is perpendicular to the local tangent and can't match both segment directions at a corner, leaving a transient step (~half-width*tan(turn/2)). Commit 37fbaf1 (square->butt) exposed it by removing the square cap's incidental forward coverage of the corner pocket.

The skill banned lc:2 and lj:2 together as the rounded-mask regression, which forced butt caps. On a track matte the cap and join are separate: the round JOIN (lj:2) rounds the settled mark (still banned), while a round CAP (lc:2) rounds only the moving frontier — the settled mark is the sharp fill, so it stays 100% sharp. The existing cap-extension makes the round start/end disc bloom over background (clipped), so no frame-1 bloom, and a round cap reaches no further than butt, so bleed is never worse.

- single-line-vectorization.md: separate cap from join in the matte-stroke rule (lc:2 + lj:1); add corner-crossing frame check; narrow the invalid-solutions ban to round joins + default round caps with a carve-out for the deliberate reveal cap.
- build_matte_snippet.md: lc:1 -> lc:2 in both JSON snippets; rewrite hard rules and terminal-cap rule around cap != join.
- derive_rails.py: emit matte_linecap 2; update route/cap-extension notes; draw debug centerline.svg footprint round-capped.
- README.md: round-cap default + corner-crossing inspection step.
2026-06-28 00:34:27 +03:00
Doruk Kavcioglu 37fbaf1a1d Switch single-line reveal matte to butt cap + cap-extended route
Replace the square-cap (lc:3) reveal matte with a butt cap (lc:1) and a
cap-extended matte_vertex_order. A square cap projected half the stroke
width past the start vertex the instant Trim left 0, blooming a full-width
blob at frame 1 (read as a ~5-10% start). Butt removes the projection;
extending the terminal vertices by half the local width keeps full cap
coverage at the finish. Trim stays 0->100.

Also harden section_widths against convex corners (2*min(left,right),
drop ambiguous samples) and make the coverage SVG production-accurate so
amber=cosmetic overhang vs red=cross-limb bleed is readable by eye.
2026-06-27 22:27:51 +03:00
Doruk Kavcioglu 9715eceff0 Add matte coverage profile + flat overlay to centerline solver
derive_rails.py now emits a per-section width profile (matte_width_profile,
width_spread, width_decision) so the matte matches each section instead of
oversizing to the global max; a containment pass that classifies matte
over-reach as inside/overhang/bleed and flags cross-limb bleed; and a
mandatory flat centerline.svg coverage overlay viewable with no dev server.
route_decision gains reveal_span [0,100] and a 0->100 trim assertion. Also
wraps the cap-edge index so a cap on the closing contour edge no longer
crashes.

Docs updated: build_matte_snippet.md (per-section matte variant + 0->100
assertion + terminal-cap rule, fenced secondary-until-rendered), README.md
usage, single-line-vectorization.md (per-section width, required flat SVG,
containment checklist, invalid solutions). SKILL.md kept to a one-line
pointer at the auto-emitted centerline.svg.
2026-06-27 21:07:32 +03:00
Doruk Kavcioglu ecaa12901c Bundle centerline rail-pairing solver for single-line reveals
Filled-mark single-path reveals routed through single-line-vectorization.md
were weaker than a prior manual exploration: agents declared rail pairing
'unreliable' on folded rails and fell back to raster skeletonization (28-point
branchy path, round caps), because the doc taught normalized-arclength pairing
and shipped no solver code.

- Add scripts/centerline/derive_rails.py: stdlib contour rail-pairing solver
  with a cap-count topology gate, a sharp-corner-fraction rail-mode test,
  polygonal midline-intersection (primary) and curved normal-foot pairing
  (secondary), emitting centerline.json with method, balance_report, and
  route_decision. Verified at parity with the gold Wise-flag output.
- Add build_matte_snippet.md (td/tt + Trim + fixed-width lc:3/lj:1/ml:8 matte,
  debug-scene layer list) and README.md.
- Rewrite single-line-vectorization.md: route-order pairing + midline/normal-foot
  method, cap-count fallback gate (only genuine branching), numeric matte rules,
  route_decision, time-box line, and a Verification Checklist.
- SKILL.md workflow now points the sandbox pass at the bundled solver.
2026-06-27 16:37:55 +03:00
Doruk Kavcioglu 0d5a13d519 Require geometry sandbox for rail-clear filled mark reveals
Make text-to-lottie enforce a concrete geometry-derivation pass before
production authoring for rail-clear ribbon/tube and other nontrivial filled
marks that need a shape-following path-driven mask.

- single-line-vectorization.md: add a Geometry Sandbox Contract section
  (derivation script + sampled centerline JSON + separate debug overlay);
  make debug overlays mandatory for ribbon/tube and shape-following reveals;
  re-aim the sandbox warning to "do the proof, keep it minimal, finish
  production"; harden the authored-route fallback (invalid for rail-clear
  ribbons without a documented midpointing failure); add a paired-rail
  algorithm checklist.
- SKILL.md: route the geometry sandbox pass into the workflow.
- evals: add a brand-neutral twisted-ribbon-loop regression case and the
  sandbox artifact pass/fail checks.
2026-06-26 23:08:11 +03:00
Doruk Kavcioglu 7111c8b8ad Require paired-rail midpointing first for rail-clear ribbon marks
Close the authored-route loophole: for marks with clear inner/outer rails,
paired-rail midpointing is now the required first attempt with a centeredness
proof gate, not a peer of an authored spine. Authored routes stay valid for
handwriting, compound marks, and creative draw order.
2026-06-26 22:31:18 +03:00
Doruk Kavcioglu e9783450df Distinguish directional wipe from shape-following path-driven reveal
The single-line vectorization flow let "path-driven mask" be read as any
animated path used as a matte, so filled-logo reveal prompts produced a
straight directional wipe instead of a source-derived, shape-following reveal.

Add a Reveal Semantics section, two operation-taxonomy rows, an invalid-solution
bullet, and a mid-reveal validation check to single-line-vectorization.md;
extend the SKILL.md routing row with path-driven/shape-following vocabulary; and
add matching routing, reference-loading, and output-rubric eval coverage.
2026-06-26 21:53:45 +03:00
Doruk Kavcioglu a3b9237dc7 Add routed single-line vectorization reference to text-to-lottie
Add references/single-line-vectorization.md covering centerline/stroke-matte/
Trim-Paths reveal drivers derived from filled SVG/logo/icon geometry while
preserving the original fill as the visible artwork. Route it from a compact
SKILL.md row and a recipe-logo.md pointer, and add lightweight eval/rubric
coverage (routing, reference-loading, and output rubric).
2026-06-26 21:06:11 +03:00
Doruk Kavcioglu 0043cd71b6 Expand seam mechanics in chapterization reference
Merge cut-on-action and easing-anchor notes into a Seam Mechanics section with a
per-method table (hard cut, jump cut, motion-masked swap, continuous carry,
occlusion wipe, hold/settle cut, loop reset) covering why each seam works, the
outgoing/incoming boundary-frame conditions, supporting anchors, and when to
switch. Add a Seam Plan checklist and a Seam Verification pass.
2026-06-25 21:07:06 +03:00
Doruk Kavcioglu 383935d3c8 Add chapterization and transition grammar reference
New references/chapterization-transition-grammar.md covering when/when-not to
chapter, chapter roles, structure modes, transition grammar, cut-on-action
mechanics, easing-anchor support, and guardrails. Route dense/multi-idea prompts
to it from SKILL.md, add a motion-taste section summary and cross-link, and split
the loop-reset bullet out from the hard-cut rule.
2026-06-25 20:45:34 +03:00
Doruk Kavcioglu 60cf4c09a3 Refine easing-anchor wording: handle placement and locked timing
Clarify that o goes on the start keyframe and i on the destination (final
keyframe needs no outgoing o), reframe the generic-easing principle around
locked vs offset timing, and tidy the overshoot note to end i.y ~1.08 to 1.2.
2026-06-25 20:08:37 +03:00
Doruk Kavcioglu 833d27a0d1 Add behavior-based easing anchors to text-to-lottie skill
Replace conceptual Easing Intent with a curated 7-anchor palette (derive,
not presets), keyed to motion behavior not layer type. Add per-property
orchestration methods, hierarchy, distance/duration, and hard-cut/loop rules.
Document the cubic-bezier -> Lottie o/i handle mapping in lottie-spec-map, and
nudge SKILL.md to derive easing from the anchors.
2026-06-25 19:57:37 +03:00
Doruk Kavcioglu ac5947da98 Resolve dev-server port from Vite output instead of hardcoding 3030
The skill hardcoded localhost:3030 for all curl/navigation, but the Vite
config sets server.port without strictPort, so the server falls back to the
next free port when 3030 is taken.

This happens most often when running multiple text-to-lottie projects in
different folders at once: the second 'npm run dev' lands on 3031+, but the
skill still pointed the agent at 3030 — silently inspecting the wrong
project. Lead with the rule to trust the printed port and use <port>
throughout.
2026-06-24 17:40:38 +03:00
Doruk Kavcioglu 9c7acb41fc Default to premium contrast palette when no brand provided
Replace the warm-near-black/cream default with a preference for pure
black/white (000/fff) contrast or another deliberate premium palette;
warm/cream tones become opt-in only when the user asks.
2026-06-23 22:24:16 +03:00
Doruk Kavcioglu e97f619ad7 docs: clarify lottie target selection guidance 2026-06-22 22:20:50 +03:00
Doruk Kavcioglu 5db3b55a3e Add restraint/anti-chrome taste defaults to text-to-lottie skill
Terse 'premium' prompts (e.g. a KPI stat card) drifted toward generic
chrome: an unnecessary framing card, mismatched divider colors, and muddy
stacked near-black tints. Encode restraint as decisive defaults so premium
reads as subtraction, with escape valves for explicitly-requested chrome.

- SKILL.md: always-on Design Defaults floor (premium=subtract, chrome/
  container budget, one surface tone, one divider treatment) + routing row
  for premium/clean/minimal qualifiers
- design-taste.md: chrome/container budget, one-surface-tone and one-divider
  rules, 'premium fails by adding chrome' note, stat-triad borderless
  default, Premium Restraint Checklist
- recipe-data-stats.md: borderless/one-surface default + framing-card /
  mismatched-divider / muddy-tint failure modes + acceptance checks
- output-rubric.md: regression blockers + the failing prompt as a tracked case
- reference-loading-prompts.json: routing coverage for the terse premium prompt
2026-06-21 01:12:53 +03:00
Doruk Kavcioglu f2c92e22b9 Add vector-text cap-center alignment guidance to skill
Hand-placed vector text has no line-height, so mixing a small label and a
large value on a shared baseline made the smaller run sink, and stacked
title/subline spacing was ad-hoc. Add a font-derived cap-center placement
formula, a type-relative vertical-rhythm rule, and QA gates so the defect
is prevented and caught.

- player-contract: cap-height baseline formula + zoomed-in alignment review
- design-taste: cap-center mixed-size rows, vertical-rhythm rule, review check
- recipe-data-stats: KPI-row alignment failure modes + acceptance checks
- output-rubric: mixed-size row / spacing eval blockers
2026-06-21 00:06:02 +03:00
Doruk Kavcioglu 3aeabe9b08 Document Skottie text rendering fast path 2026-06-20 22:37:05 +03:00
Doruk Kavcioglu 993284019b Add text-to-lottie final review pass 2026-06-20 22:10:58 +03:00
Doruk Kavcioglu e3cc7451b1 Integrate text-to-lottie taste guidance 2026-06-20 21:15:01 +03:00
Doruk Kavcioglu 4ac8ce38c2 Strengthen text-to-lottie design QA 2026-06-19 17:26:38 +03:00
Doruk Kavcioglu 0b6aa1fad3 Improve text-to-lottie quality guidance 2026-06-19 00:58:46 +03:00
Doruk Kavcioglu 4c05ecbb54 Refresh text-to-lottie skill 2026-06-19 00:05:34 +03:00
Konstantin Paulus a4e20b894d Merge pull request #5 from diffusionstudio/solid-rewrite
Solid rewrite
v1.0.0
2026-06-15 16:38:02 +02:00
konstantin-paulus 1d3b2befcd Update README.md to clarify framework description and enhance workspace setup explanation
- Changed "harness" to "framework" for better accuracy in describing Text-to-Lottie.
- Revised the description of the agent's setup process to provide clearer instructions on workspace and player functionality.
2026-06-15 16:34:20 +02:00
konstantin-paulus 10a306550e Update package version to 1.0.0 2026-06-15 16:25:26 +02:00
konstantin-paulus 4f417a2266 minor skill optimizations 2026-06-15 15:13:28 +02:00
konstantin-paulus 0b0c7be3b5 Enhance scene loading and live update functionality
- Updated CanvasProvider to include a refetch mechanism for scene data upon external edits to the Lottie file.
- Modified loadScene function to disable caching for Lottie file fetches, ensuring the latest version is always loaded.
- Implemented a self-write tracking system in the scenes plugin to differentiate between internal and external changes, triggering live reloads only for the latter.
2026-06-15 12:56:35 +02:00
konstantin-paulus 8c1a0c1dc1 Add references section to SKILL.md for Lottie format specification
- Included a new References section in SKILL.md to provide a link to the Lottie format specification documentation.
- This addition aims to enhance the resourcefulness of the document for users seeking detailed information on Lottie animations.
2026-06-14 20:05:29 +02:00
konstantin-paulus cbaa89546d Remove controls.json and update lottie.json for scene 1
- Deleted the controls.json file as it is no longer needed.
- Updated lottie.json to reflect changes in naming and structure, including renaming the main scene and modifying layer properties for improved clarity and functionality.
2026-06-14 20:01:13 +02:00
konstantin-paulus a723283e10 Implement context menu for scene and project deletion in ScenesContainer and SidebarLeft
- Added context menu functionality to allow users to delete scenes and projects directly from the UI.
- Integrated deleteScene and deleteProject functions to handle deletion requests and navigation upon deletion.
- Updated SceneItem and SidebarLeft components to utilize context menus for improved user interaction.
- Enhanced CSS for context menu styling to ensure a consistent and visually appealing design.
2026-06-14 17:07:41 +02:00
konstantin-paulus b6a386caed Update CanvasProvider to re-run totalFrames on animation load for accurate seeking 2026-06-14 16:55:56 +02:00
konstantin-paulus 91153550dd Enhance theming and styling across the application
- Implemented a dynamic color scheme toggle based on user preferences for improved accessibility.
- Updated CSS variables for light and dark themes to ensure consistent styling.
- Refined the NumericSlider component by removing default box-shadow and border styles for a cleaner appearance.
- Adjusted button styles in base.css to support dark mode while maintaining visual consistency.
2026-06-14 16:48:25 +02:00
konstantin-paulus 16597a43c5 Add default focus indicator styles for improved accessibility
- Introduced a focus-visible style to enhance keyboard navigation and accessibility.
- Applied a consistent inset border and box-shadow for focused elements, overriding default styles.
- Ensured smooth transitions for focus effects to improve user experience.
2026-06-14 16:16:46 +02:00
konstantin-paulus 9a7dba90f6 Enhance UI responsiveness and control visibility in Sidebar and App components
- Integrated UI context to manage the visibility of controls in SidebarLeft and SidebarRight.
- Updated App component to conditionally render ScenesContainer based on control expansion state.
- Adjusted SidebarLeft and SidebarRight widths dynamically based on control visibility for improved user experience.
- Refactored SidebarLeft to include project management features only when controls are expanded.
2026-06-14 16:11:21 +02:00
konstantin-paulus 7edb14d682 Implement live playback context and server middleware for scene updates
- Added functionality to track and report live playback state, including project, scene, frame, and playback status.
- Introduced server middleware to handle browser heartbeat updates and provide context for active projects and scenes.
- Enhanced scene metadata retrieval with last modified timestamps for better asset management.
2026-06-14 15:51:02 +02:00
konstantin-paulus 8e81351f36 Add drag-and-drop functionality for Lottie file import in CanvasProvider 2026-06-14 15:16:40 +02:00
konstantin-paulus 613c554058 Enhance keyboard controls in CanvasProvider for improved playback and navigation
- Updated onKeyDown function to handle space key for toggling playback.
- Implemented arrow key navigation to step through frames and seconds.
- Improved input handling to prevent key hijacking while typing in editable fields.
2026-06-14 15:07:16 +02:00
konstantin-paulus b3c620a081 Add fflate dependency and enhance Lottie JSON handling in SidebarRight
- Introduced "fflate" dependency for improved compression handling.
- Updated SidebarRight to utilize new commitSource function for saving Lottie JSON edits.
- Refactored Lottie JSON structure for better readability and maintainability.
- Implemented server middleware to handle Lottie JSON updates, ensuring the source of truth is maintained.
2026-06-14 15:04:01 +02:00
konstantin-paulus c86ca8ce4b Enhance styling and functionality in SidebarLeft and update CSS for selection
- Set default project name in SidebarLeft input to "New project" for better user experience.
- Implemented input focus and selection handling for improved usability.
- Added CSS variables for selection colors and styles to enhance visual feedback during text selection.
2026-06-14 12:54:37 +02:00
konstantin-paulus d030feecfc Update lottie.json with scene name and refactor SceneItem component for improved styling and structure
- Added "nm" property to lottie.json to specify the scene name.
- Refactored SceneItem component to streamline button structure and enhance styling with consistent class usage.
- Simplified rendering logic for thumbnail images within the SceneItem component.
2026-06-14 12:39:03 +02:00
konstantin-paulus af54e706c6 Refactor ScenesContainer to use SceneItem component for improved structure and thumbnail loading
- Replaced inline scene rendering logic with a dedicated SceneItem component for better readability and maintainability.
- Integrated thumbnail loading using createResource for each scene, enhancing performance and user experience.
- Updated scene navigation logic to maintain existing functionality while improving code organization.
2026-06-14 12:36:12 +02:00
konstantin-paulus b702e706aa Implement scene routing and enhance 404 handling
- Added SceneRoute component to manage scene availability and loading states.
- Introduced NotFound component for improved user feedback when a project or scene is not found.
- Updated routing to utilize SceneRoute for dynamic scene rendering and replaced generic not found message with NotFound component.
2026-06-14 12:07:26 +02:00
konstantin-paulus 475961dc55 Add scene creation functionality and enhance sidebar interactions
- Implemented addScene function in ScenesContainer for dynamic scene addition.
- Enhanced SidebarLeft to allow project creation with input handling and keyboard events.
- Updated server middleware to handle project and scene creation requests, ensuring unique slugs and default scene setup.
- Improved user experience with input focus and blur handling for project naming.
2026-06-14 12:02:04 +02:00
konstantin-paulus 9bd32d9b7b Enhance app structure and scene management
- Integrated scenesPlugin into Vite configuration for improved scene handling.
- Removed obsolete controls.json and lottie.json files to streamline project assets.
- Refactored App component to eliminate CanvasProvider, simplifying the component hierarchy.
- Updated routing to include scene navigation and default redirection based on available scenes.
- Enhanced ScenesContainer and SidebarLeft components for dynamic project and scene management.
- Improved CanvasProvider to load scene-specific data and manage animations effectively.
2026-06-13 22:47:31 +02:00
konstantin-paulus 44f6b416fa Refactor project structure and update dependencies
- Updated .gitignore to include new build and environment files.
- Upgraded dependencies in package.json and bun.lock, including major updates for canvaskit-wasm and tailwind-merge.
- Removed outdated package-lock.json and tsconfig files.
- Replaced React with Solid.js for improved performance and reactivity.
- Introduced new components and updated the app structure for better organization.
- Added new SVG icons and fonts for enhanced UI.
- Updated index.html and CSS for improved styling and layout consistency.
2026-06-13 18:34:02 +02:00