Conversation
…le headers Refinement pass on the v0.3 overlay card system and project documentation. Four areas of work. 1. Overlay card fixes. Removed overflow: hidden that was clipping corner-bracket SVGs. Replaced the px-based auto-fill grid with mobile-first 1fr columns (1 col default, 2 at sm/48em, 3 at lg/82.667em). Added truncation for consistent card height: 3-line CSS clamp on descriptions, max 3 use_case tags and requires items with +N overflow indicators. Always-visible DETAILS button opens a full-content detail modal. 2. Modal abstraction. Extracted base-modal.vue (reusable shell with backdrop, ESC, teleport, fade, named slots). Refactored preview-modal.vue to use it. Created detail-modal.vue as a second consumer for overlay info. Extracted parseEmphasis into shared utils. 3. cam-person renamed to cam-log across 7 files (Vue component, router, overlays.js id + path, CHANGELOG, ci.yml comment, local buffers) for consistency with the display name CAM-LOG. 4. Tier 1 file headers. Established a standardized header pattern for all root config/setup/org files using figlet smslant ASCII art with cyberpunk place names. Applied to 11 files: .gitignore (the void), vite.config.js (the forge), eslint.config.mjs (the precinct), index.html (the gate), .gitattributes (the lab), .env.example (the vault), ci.yml (the watchtower), release.yml (the checkpoint), CHANGELOG.org (the logs), README.org (the bridge), LICENSING.org (the pact). Each header follows: license, figlet art, filename + date, description, TOC, optional guidelines/requirements, author/contact. Modified-by: Cristian D. Moreno (Kyonax) <kyonax25@gmail.com>
…xes, Tier 1 headers Comprehensive refinement and architectural refactor of the v0.3 codebase. Six areas of work. 1. Brand-driven architecture. Each @brand/ folder at the project root is now the single source of truth for that brand. brand-loader.js auto-discovers brands + sources via import.meta.glob. Routes generate dynamically from discovered sources. Centralized overlays.js deleted, replaced by per-brand sources.js. src/brands/ removed. cam-log.vue moved to @kyonax_on_tech/hud/cam-log.vue. Brand metadata (identity, colors, links) in brand.js. Theme injection in App.vue via route meta. 2. Vite aliases + import cleanup. Added @shared, @views, @app, @assets aliases. Converted all imports from relative paths to alias-based. Zero ../ paths remain. Landing page components (overlay-card, modals, parse-emphasis) separated from src/shared/ to src/views/ since they are landing-page-only. 3. ESLint Vue SFC + naming conventions. Added eslint-plugin-vue with flat/essential processor for script setup support. Added @typescript-eslint/ naming-convention for CCS standards enforcement on plain JS (snake_case vars, camelCase functions, UPPER_CASE constants, PascalCase classes). Created tsconfig.eslint.json for type-aware linting. 4. Overlay card fixes. Removed overflow: hidden, mobile- first 1fr grid, description 3-line clamp, max 3 use_case tags and requires with +N indicators, always-visible DETAILS button with detail-modal. 5. Tier 1 file headers. Figlet smslant ASCII art with cyberpunk place names on 15 root config/setup/org files. Structured layout: license, art, filename, date, description, TOC, guidelines, author/contact. 6. Documentation + security. CONTRIBUTING.org created with setup, conventions, workflow, CI, PR process. SECURITY.org expanded with banned patterns table, enforcement layers, contributor checklist. .gitignore hardened with additional secret-file patterns. README updated with Setup section and Contributing summary. 31 files changed, 1611 insertions, 336 deletions. 26 tests passing, 0 lint errors, clean build. Modified-by: Cristian D. Moreno (Kyonax) <kyonax25@gmail.com>
Splits the component layer by kind (views into sections /
elements / modals; shared components into ui / hud), extracts
five real sections out of home.vue, adds one Vite alias per
kind-folder, and rewrites all template tags to PascalCase so
they match the import binding. 18 files touched.
1. views/components/ split by kind
Three new subfolders with a single purpose each:
sections/ top-level page regions (one per page)
elements/ reusable list items (v-for children)
modals/ overlay surfaces (shell + instances)
Existing view files moved into their kind folder:
overlay-card.vue to elements/card.vue
base-modal.vue to modals/base.vue
preview-modal.vue to modals/preview.vue
detail-modal.vue to modals/detail.vue
2. Five sections extracted from home.vue
meta.vue sticky stats strip — SOURCES/BRANDS/READY/CANVAS
hero.vue ASCII logo + tagline + SYS.LOG/version tags
setup.vue QUICK SETUP six-step flow
sources.vue brand tabs + filter bar + grid
footer.vue author + license line
home.vue slimmed from ~655 lines to ~80. Filter state —
search_query, status_filter, selected_brand — moved out of
home.vue and into sources.vue where it is actually consumed.
3. shared/components/ renamed to Option-C short filenames
components/hud-frame.vue to components/hud/frame.vue
components/recording-timer.vue to components/hud/timer.vue
components/status-indicator.vue to components/ui/status.vue
Filenames drop the kind; the kind comes back at the
import-binding layer as <HudFrame>, <HudTimer>, <UiStatus>.
4. Corner-bracket Vue component to raw SVG asset
components/corner-bracket.vue deleted. Replaced by a raw SVG
at assets/svg/corner-bracket.svg plus a new generic loader at
components/ui/icon.vue using import.meta.glob with the ?raw
query. New icons are now "drop the file into the folder" — no
more one-SFC-per-icon boilerplate.
5. Seven new Vite kind-aliases in vite.config.js
@Sections src/views/components/sections/
@elements src/views/components/elements/
@modals src/views/components/modals/
@ui src/shared/components/ui/
@hud src/shared/components/hud/
@widgets src/shared/widgets/
@composables src/shared/composables/
Alias count grows from 4 to 11. Every kind-folder has one.
6. Template tags and imports rewritten
All tags in touched files switched to PascalCase to match the
import binding. cam-log.vue, frame.vue, timer.vue, card.vue,
preview.vue, detail.vue, sources.vue, home.vue. Bindings
follow the kind suffix/prefix registry:
@Sections XxxSection HeroSection, MetaSection, ...
@modals XxxModal BaseModal, PreviewModal, ...
@elements Xxx Card
@ui UiXxx UiIcon, UiStatus
@hud HudXxx HudFrame, HudTimer
@widgets as-is AudioMeter, LiveReadout
Validation: 26/26 tests pass, 0 lint errors (7 pre-existing
warnings), production build clean in 1.15s.
Modified-by: Cristian D. Moreno (Kyonax) <kyonax25@gmail.com>
Post-Part-A refinement pass. Seven coherent changes that tighten
naming discipline, deduplicate view SCSS, isolate web sources from
shared HUD vocabulary, and fix the silently-broken brand theming
chain. 23 files staged.
1. Three new shared/components/ui/ primitives
data-point.vue <UiDataPoint> label/value tile (sm | lg)
chip.vue <UiChip> lowercase pill (solid | overflow)
badge.vue <UiBadge> uppercase status pill (active | dim)
Replaced ~12 inline duplicates across stats.vue, card.vue, and
detail.vue. ~40 lines of duplicated SCSS removed from consumers.
All props-in-DOM-out — correctly placed in ui/ (no side-effects).
2. shared/widgets/ split by kind
widgets/audio-meter.vue to widgets/hud/audio-meter.vue
widgets/live-readout.vue to widgets/ui/live-readout.vue
Mirrors the shared/components/hud|ui split: audio-meter is
OBS-coupled (HUD-domain), live-readout is domain-agnostic.
Consumers import via @widgets/hud/* and @widgets/ui/*.
3. Filenames describe purpose, never repeat the alias kind (Rule G)
sections/meta.vue to sections/stats.vue
ui/metric.vue to ui/data-point.vue
ui/status.vue to ui/status-dot.vue
views/utils/parse-emphasis.js to views/utils/markup.js
"meta" was ambiguous (metadata/HTML-meta/meta-programming).
"metric of what?" / "status shown how?" tests failed — multi-
word names answer the question. Modals stay single-word
(base/preview/detail.vue) because @modals/ already supplies
"modal" — base-modal.vue would be redundant. Bindings keep
the kind: <BaseModal>, <UiDataPoint>, <StatsSection>.
4. Utils as topic-based libraries (Rule J)
markup.js holds parseEmphasis as a named export. Future markup
parsers (parseLinks, parseCodeSpans) live in the same file.
Never one-function-per-file. Composables exempt — one useX
per file because hooks own state and lifecycle.
5. Brand folder restructured to mirror src/shared/
@brand/hud/cam-log.vue to @brand/sources/hud/cam-log.vue
@brand/animation/ to @brand/sources/animation/
@brand/scene/ to @brand/sources/scene/
Eliminates the clash where @brand/hud/ (web sources) and @hud/
(shared HUD primitives) both used "hud". brand-loader.js globs
updated; resolveComponent() key pattern now
/<brand>/sources/<type>/<id>.vue. Reserved slots documented
for brand-private components/{hud,ui}/, composables/,
widgets/{hud,ui}/ (created only when 2+ files exist, Rule F).
6. <UiIcon> multi-pool SVG discovery
Previously globbed only @shared/assets/svg/*.svg. Now also
globs /@*/assets/svg/*.svg — any brand can drop SVGs in its
own assets/svg/ folder and reference them by filename. Brand
SVGs override shared SVGs on filename collision (useful for
brand-flavored overrides of shared primitives).
7. Brand theming — SCSS single source of truth
Fixed three silently-broken things:
- @<brand>/styles/_theme.scss was orphaned (never imported).
- brand.js colors duplicated the SCSS values.
- brand.js held only a subset of palette ranges.
Fix: src/main.js eagerly globs /@*/styles/_theme.scss so Vite
bundles every brand theme into global CSS. brand.js lost its
colors field entirely. App.vue dropped brand_theme_vars and
only applies .brand-<handle> on route change — the CSS
cascade does the rest. brand-loader test flipped from "has
colors object" to "does NOT carry colors field" (enforcement).
Verified: grep brand-kyonax-on-tech dist/assets/*.css
matches in the production bundle.
Validation: 27/27 tests pass, 0 lint errors (7 pre-existing
warnings in use-audio-analyzer.js), production build clean in
1.25s.
Modified-by: Cristian D. Moreno (Kyonax) <kyonax25@gmail.com>
feat: brand-driven architecture, ESLint Vue + naming, overlay card fixes, Tier 1 headers
Protected Files ModifiedOne or more files in the protected set were changed in this PR. Each category below explains why the file matters. Legal / Licensing
Modifying these files changes the project's legal posture. Confirm with the maintainer before merging. Governance
CODEOWNERS / SECURITY / PR template changes affect how every future PR is reviewed. Review carefully. Supply Chain
Dependency or lockfile changes. Verify the diff (no unexpected packages, no version downgrades). CI / Security Config
Workflow / lint config. A quiet edit here can disable gates — diff against origin carefully. Build / Config
Build or gitignore config. Verify the build still passes and no ignored paths were accidentally un-ignored. Release Artifact
Release-tracking files. Expected on release PRs; flag on non-release PRs. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Checklist (check if it applies)
npm run lint)Pre-Check Failedlabel applied by CI)What does this PR do?
Ships RECKIT v0.4 to
master. Fast-forwards the default branch with the architectural refactor already reviewed and merged intodevvia PR #3. Contents are five commits (three feature + fix commits from the earlierfeat-fixes-and-refinement-v3cycle, one Session 7 Part B commit, and the merge commit from PR #3) — no further code changes since that merge.This release promotes the kind-folder component architecture, 11-alias Vite registry, three new
shared/components/ui/primitives, brand folder restructure intosources/, and the SCSS-single-source-of-truth brand theming chain tomaster.v0.4becomes the architectural baseline on which all subsequent brand work builds — starting with the already-branchedfeat-brand_kotfor@kyonax_on_techexpansion.Design / Reference: Release notes in
CHANGELOG.orgunder the[v0.4]entry (to be added as part of this PR). Architecture rules codified inCONTRIBUTING.org. Full feature-level narrative in the merged PR #3.Implementation
@brand/folder is the single source of truth;brand-loader.jsauto-discovers viaimport.meta.glob; dynamic routing from discovered sources; centralizedoverlays.jsdeleted in favor of per-brandsources.js. (see PR #3 for detail)views/components/split intosections/+elements/+modals/;shared/components/split intoui/+hud/;shared/widgets/split intowidgets/hud/+widgets/ui/; five sections extracted fromhome.vue(~655 lines down to ~80); brand folders restructured so web sources live under<brand>/sources/<type>/<id>.vue. (see PR #3 for detail)shared/components/ui/primitives —<UiDataPoint>(label/value tile),<UiChip>(lowercase pill),<UiBadge>(uppercase status pill); ~40 lines of duplicated SCSS removed acrossstats.vue/card.vue/detail.vueconsumers. (see PR #3 for detail)@shared,@views,@app,@assets) + seven kind-folder aliases (@sections,@elements,@modals,@ui,@hud,@widgets,@composables). (see PR #3 for detail)@<brand>/styles/_theme.scssauto-loaded at build by an eager glob insrc/main.js;brand.jsno longer carries acolorsfield (enforced bybrand-loader.test.js);App.vueapplies the.brand-<handle>class and the CSS cascade resolves everyvar(--clr-*)call. (see PR #3 for detail)<UiIcon>multi-pool SVG discovery — scans both@shared/assets/svg/*.svgand/@*/assets/svg/*.svg; brand SVGs override shared on filename collision. (see PR #3 for detail)views/utils/parse-emphasis.jsrenamed toviews/utils/markup.js;parseEmphasisstays a named export; future inline-markup parsers absorb into the same file. (see PR #3 for detail)@typescript-eslint/naming-convention— CCS naming rules machine-enforced across.jsand.vue;tsconfig.eslint.jsonwires the TS parser forallowJs. (see PR #3 for detail)<DetailModal>— mobile-first 1fr grid, 3-line description clamp, max 3 use-case chips with+Noverflow, always-visible DETAILS button wired to a full-source-info modal. (see PR #3 for detail)CONTRIBUTING.org+ expandedSECURITY.org— setup / conventions / CI / PR process (the dojo); banned-pattern tables, enforcement layers, contributor checklist (the shield). (see PR #3 for detail)Release
Version: v0.4 (was v0.3)
package.json— version bumped from0.3.0to0.4.0(PENDING — runnpm version 0.4.0 --no-git-tag-versionondevbefore merge)README.org—#+VERSION: v0.3tov0.4, ASCII logo footer░v0.3to░v0.4, shields.io badgeversion-v0.3toversion-v0.4,alt="v0.3"toalt="v0.4",#+LAST_UPDATE:refreshed to today (PENDING)CHANGELOG.org— new[v0.4] — 2026-04-21 :: Architectural Baselineblock added above[v0.3]with Added / Changed / Removed / Decided subsections (PENDING)CI & Tooling
dev(vite.config.jswith 11 aliases,eslint.config.mjswith Vue SFC support,tsconfig.eslint.json).Dependencies
eslint-plugin-vue,vue-eslint-parser,@typescript-eslint/parser,@typescript-eslint/eslint-pluginare already ondevfrom that PR)Docs
CHANGELOG.org—[v0.4]entry to be added (see Release subsection above); serves as the primary release notes artifact forgh release create.CONTRIBUTING.org,SECURITY.org,README.org) was last updated by PR #3 — no further doc edits in this release PR.Technical Details
Release-cut strategy — ship Sessions 6 + 7 A+B as v0.4, hold
feat-brand_kotfor a later tagv0.4from the currentdevstate, which captures the mergedfeat-fixes-and-refinement-v3branch (kind-folder architecture + naming convention + SCSS theming fix) as a coherent architectural baseline.feat-brand_kotbranch (Session 8,@kyonax_on_techbrand expansion including the planneditem-explain.vueanimation web source) to merge intodevfirst and shipping a combined v0.4.masternow gives downstream brand work (starting withfeat-brand_kot) a named baseline to build against. Delaying would couple two independent efforts into one tag and increase rollback blast radius if either needs to be reverted.feat-brand_kotwill land inv0.4.1orv0.5instead ofv0.4. Observers watching onlymastertags will see two smaller releases rather than one combined release.Release artifact flow —
release.ymlenforces the version triad on everydevtomasterPRrelease.ymlgate that requirespackage.jsonversion,README.org#+VERSION:markers, and a newCHANGELOG.org[vX.Y]block to land ondevbefore this PR can pass CI.package.jsonupdated butREADMEforgotten) from reachingmaster. The triad is the single contract every release PR must satisfy;release.ymlis the load-bearing check.devbefore this PR turns green — an extra pre-merge step versus a single-file bump. The benefit is thatmasternever carries a mismatched version string betweenpackage.jsonand the visible UI / badges.Architectural baseline semantics —
v0.3stays the "CAM-LOG first release",v0.4becomes the "architecture baseline"v0.4as the tag that captures the kind-folder split, 11-alias registry, and SCSS-single-source-of-truth brand theming as the foundation for all subsequentv0.4.xandv0.5brand / widget work.v0.3and treating Sessions 6 + 7 as untagged internal refinement.feat-brand_kotbranch (and every future brand expansion) relies on the new folder conventions, aliases, and theming rules. Having a named tag for that foundation makes git bisection and rollback trivial if a later brand-specific change regresses the architecture; it also gives the CHANGELOG a natural point to describe the architecture rather than mixing it into a feature entry.v0.3for the first working CAM-LOG overlay + landing page,v0.4a week later for the refactor). The release cadence is acceptable for a solo project; downstream consumers don't exist yet.Testing Coverage
Test runner: Vitest @ 4.1.x
Command:
npm run testAutomated tests
Total: 27 tests across 2 files (
src/shared/brand-loader.test.js,src/shared/version.test.js), all passing.Quality gates (run on every PR)
eslint.config.mjsvianpm run lintuse-audio-analyzer.jsarray indexing)vite.config.jsvianpm run testvite.config.jsvianpm run build.github/workflows/ci.yml.github/workflows/ci.ymlPre-Check Failedlabelpre-check-labeljob in.github/workflows/ci.yml.github/workflows/release.ymldevHow to test this PR
Pre-merge — triad readiness
grep '"version"' package.jsonExpected: prints
"version": "0.4.0",— the bump from0.3.0has already landed ondevgrep -nE '#\+VERSION:|░v[0-9]|badge/version-v|alt="v[0-9]|#\+LAST_UPDATE' README.org | head -10Expected: every matching line reads
v0.4;#+LAST_UPDATE:reads today's dategrep -n '^\*\s\+\[v' CHANGELOG.org | head -5Expected: first match is
[v0.4] — 2026-04-21 :: <Short Title>; second match is[v0.3]npm run lint && npm run test && npm run buildExpected: all three commands exit 0; build finishes under 2 seconds;
dist/assets/contains the hashedindex-*.css,index-*.js,home-*.js,cam-log-*.js,version-*.jsbundlesgh pr checks 4 --watchExpected: all gates turn green;
release.ymlno longer blocksPost-merge — master baseline pipeline
git clone https://github.com/Kyonax/reckit.git /tmp/reckit-v0.4 && cd /tmp/reckit-v0.4Expected: clones successfully;
git log --oneline -5shows the merge commit from this PR at the top ofmasternpm ci && npm run lint && npm run test && npm run buildExpected: clean install, zero lint errors, 27/27 tests pass, build exits 0 under 2 seconds
cat package.json | grep versionExpected:
"version": "0.4.0"Post-merge — UI version surfaces
http://localhost:5173/and look at the top sticky stats bar + the top-rightSYS.LOGtagExpected: the right-side tag reads
RECKIT v0.4(derived frompackage.jsonvia__APP_VERSION__invite.config.jsandsrc/shared/version.js)http://localhost:5173/@kyonax_on_tech/cam-logExpected: the HUD overlay renders; the
toolkit-idlabel in the bottom-right readsRECKIT v0.4Expected: ASCII logo footer shows
░v0.4; shields.io badge showsversion v0.4Post-tag — GitHub Release artifact
https://github.com/Kyonax/reckit/releases/tag/v0.4Expected: release page renders; title reads
RECKIT v0.4; body contains the[v0.4]slice fromCHANGELOG.orgExpected: tarball matches the
mastertree at the tag commitSpecial Deployment Requirements
package.json(CRITICAL) — runnpm version 0.4.0 --no-git-tag-versionondevbefore merge. Stages the bump without creating a tag (the tag is applied post-merge onmaster).v0.4(CRITICAL) — run the foursed -i -Epatches from the release runbook to update#+VERSION:, ASCII logo footer, shields.io badge,alt="v0.3", and#+LAST_UPDATE:ondev.CHANGELOG.orggets a[v0.4]block (CRITICAL) — insert above[v0.3]withAdded / Changed / Removed / Decidedsubsections; reference PR #3 for the full per-file inventory; summarize the theme delta (kind-folder architecture, 11 aliases, 3 new ui primitives, SCSS theming fix, brand restructure).v0.4onmaster(REQUIRED, post-merge) —git tag -a v0.4 -m "RECKIT v0.4"thengit push origin v0.4. Enables the GitHub Release step and marks the architecture baseline.[v0.4]slice fromCHANGELOG.orginto a temp file, thengh release create v0.4 --title "RECKIT v0.4" --notes-file <file>. Produces a browsable release page and attaches source tarballs.master(OPTIONAL, one-time) — enable "Require a pull request before merging" + "Require status checks to pass" (includerelease.yml,ci.yml,pre-check-label) in repo settings. Prevents direct pushes tomasterand enforces the triad contract going forward.Documentation
DIAGRAM — v0.3 to v0.4 delta
Full narrative in the merged PR #3. Canonical architecture rules in
CONTRIBUTING.org(Rules A–J covering component classification, extraction discipline, folder existence, aliases, import bindings, and topic-library utils).DESKTOP — Landing page at v0.4
Demo capture pending, will be attached after tag + release.
DIAGRAM — Brand theming SCSS single source of truth
Full flow in
CONTRIBUTING.orgunder the brand-theming architecture section.