Commit Graph

56 Commits

Author SHA1 Message Date
Ilia Mashkov 7cba3053f4 feat: ViewTransitionWrapper shared component with stable react-dom fallback
Wraps children in React's ViewTransition (canary API) when available,
falling back to Fragment in environments where ViewTransition is undefined
(test env, stable react-dom). Add react/canary to tsconfig types to
expose the ViewTransition component type.
2026-05-12 16:10:37 +03:00
Ilia Mashkov 0090718869 fix: add outline to primary and secondary button variants 2026-05-12 13:58:29 +03:00
Ilia Mashkov 301e7a2555 feat: RichText component for safe PocketBase HTML rendering
Add html-react-parser-backed RichText component that converts HTML
strings from PocketBase rich-text fields into React elements without
dangerouslySetInnerHTML. Replace raw <p> render in IntroSection and
BioSection, and drop the invalid slug filters those collections lacked.
2026-05-12 13:58:17 +03:00
Ilia Mashkov 0a99a37bca fix: remove underline from collapsed section title links
Global a { border-bottom } was leaking onto the inactive section
nav links. Override with border-b-0 hover:border-b-0.
2026-05-12 13:57:39 +03:00
Ilia Mashkov e8bf8b502e fix: align PocketBase type definitions with actual schema
Remove slug field from PageContentRecord (intro/bio collections have none).
Remove number field from SectionRecord (not stored in PocketBase); derive
zero-padded display number from the order field at render time.
2026-05-12 13:57:25 +03:00
Ilia Mashkov 30f8e4be95 design: two-color palette — rename all tokens to --cream / --blue
Replace ochre-clay, carbon-black, burnt-oxide, slate-indigo with clean
two-color system: --cream (#f4f0e8) and --blue (#041cf3). Update every
component, utility class, and test assertion.
2026-05-11 12:59:32 +03:00
Ilia Mashkov fed9c97ddb feat: URL-driven catchall routing, drop sidebar nav, split export build
- app/[[...slug]]/page.tsx replaces app/page.tsx; activeSlug from URL params
- SidebarNav and MobileNav removed from main layout (sections accordion is the nav)
- next.config.ts: output:export controlled by STATIC_EXPORT env var instead of NODE_ENV
- package.json: yarn build is standard Next.js build; yarn export is STATIC_EXPORT=true
- Mock API route: force-static + generateStaticParams for output:export compatibility
2026-05-11 11:12:21 +03:00
Ilia Mashkov af165ec356 feat: MobileNav section items use Link, close menu on pathname change 2026-05-11 11:11:53 +03:00
Ilia Mashkov 1dfa9a62a2 design: update color palette from ochre-clay to white/blue scheme 2026-05-11 11:11:29 +03:00
Ilia Mashkov b4bda4b8f7 chore: biome format vitest config, add Props JSDoc to SidebarNav 2026-05-11 11:11:24 +03:00
Ilia Mashkov f9cdb06632 refactor: SidebarNav uses usePathname and Link instead of IntersectionObserver 2026-05-07 12:54:53 +03:00
Ilia Mashkov 9fa2156ee8 feat: SectionAccordion inactive state uses Link href instead of button onClick 2026-05-07 12:52:54 +03:00
Ilia Mashkov ced77f6f07 fix: make output export build-only so dev route handlers work 2026-05-07 12:28:42 +03:00
Ilia Mashkov f163b750b2 docs: add URL-driven section routing implementation plan 2026-05-07 11:48:55 +03:00
Ilia Mashkov 41d1a37352 docs: add URL-driven section routing design 2026-05-07 11:45:54 +03:00
Ilia Mashkov 1a413e3d04 feat: implement portfolio home page with split layout 2026-05-05 09:42:04 +03:00
Ilia Mashkov 24bf946cb0 refactor: SectionFactory static registry, remove dynamic imports 2026-05-05 09:41:56 +03:00
Ilia Mashkov 4219a7b4e7 fix: correct RSC error patterns and extract skills grouping to utility 2026-05-05 09:41:49 +03:00
Ilia Mashkov 4b18fc454e chore: add mock API route handlers and dev env config 2026-05-05 09:41:39 +03:00
Ilia Mashkov 41edc7edf7 refactor: reorganize shared/lib into per-function subfolders 2026-04-24 11:43:08 +03:00
Ilia Mashkov f3b4e1d064 refactor: extract contact links to shared config 2026-04-24 10:11:34 +03:00
Ilia Mashkov fce4672218 feat: add groupByKey utility 2026-04-24 09:34:27 +03:00
Ilia Mashkov d89dc2ee70 chore: add vitest/globals types, remove redundant vitest imports, fix pre-existing lint issues 2026-04-24 09:34:27 +03:00
Ilia Mashkov f0fccd55f1 fix: replace revalidate with cache force-cache for SSG compatibility 2026-04-24 09:34:27 +03:00
Ilia Mashkov 5dbf5e34c2 fix: mock next/font in tests and remove broken shared export 2026-04-23 21:01:46 +03:00
Ilia Mashkov 68d5de3716 chore: setup lefthook for pre-commit checks 2026-04-23 21:00:43 +03:00
Ilia Mashkov 1d333fd945 chore: format codebase and move SectionAccordion to entities/Section 2026-04-23 20:52:43 +03:00
Ilia Mashkov 8aff27f8ac chore: configure biome for linting and formatting 2026-04-23 20:40:11 +03:00
Ilia Mashkov 9c139adbf5 feat: define PocketBase types and fetch client 2026-04-23 20:35:46 +03:00
Ilia Mashkov 759f579695 fix: storybook font rendering and shared fonts module 2026-04-23 20:35:32 +03:00
Ilia Mashkov de03d21429 feat: add Storybook with component stories
Installs @storybook/nextjs-vite. Stories co-located with components,
grouped by layer (Shared/Entities/Widgets). Multi-variant cases use
render functions instead of one story per variant/size.
2026-04-19 09:19:17 +03:00
Ilia Mashkov a47341ffcb feat: add Navigation widget barrel export 2026-04-19 08:40:10 +03:00
Ilia Mashkov cfe50069b7 feat: add MobileNav, SidebarNav, and UtilityBar widgets
TDD implementation of three navigation widgets: mobile overlay toggle,
fixed sidebar with IntersectionObserver-driven active section tracking,
and utility bar with contact info and CV download action.
2026-04-19 08:40:08 +03:00
Ilia Mashkov 590147adb1 feat: add experience entity (ExperienceCard) and entities barrel export 2026-04-19 08:37:24 +03:00
Ilia Mashkov eeef679f69 feat: add project entity (ProjectMetadata, ProjectCard, DetailedProjectCard) 2026-04-19 08:37:21 +03:00
Ilia Mashkov 0fa66f275d feat: add shared/ui and shared barrel exports; add FSD path aliases to tsconfig 2026-04-19 08:34:38 +03:00
Ilia Mashkov ad188fcb21 feat: add TechStackBrick and TechStackGrid components to shared/ui 2026-04-19 08:27:56 +03:00
Ilia Mashkov faf6c574d1 feat: add SectionAccordion component to shared/ui 2026-04-19 08:27:08 +03:00
Ilia Mashkov d17104b294 feat: add Section and Container components to shared/ui 2026-04-19 08:26:26 +03:00
Ilia Mashkov 9c52889b72 fix: associate Input/Textarea labels and wire error aria-describedby
Uses useId() for stable IDs so label htmlFor matches input id,
and error spans are referenced via aria-describedby.
2026-04-19 08:25:07 +03:00
Ilia Mashkov dc3bedeeec feat: add Input and Textarea components to shared/ui 2026-04-19 08:20:29 +03:00
Ilia Mashkov 26860b27e5 feat: add Card component family to shared/ui 2026-04-19 08:19:58 +03:00
Ilia Mashkov 11e7aa9a96 feat: add Button component to shared/ui 2026-04-19 08:19:23 +03:00
Ilia Mashkov 169988906c refactor: rename shared/ui component dirs to PascalCase 2026-04-18 23:26:14 +03:00
Ilia Mashkov f95588381d fix: export BadgeVariant type from Badge public API 2026-04-18 15:54:45 +03:00
Ilia Mashkov bb9c91b4f8 feat: add Badge component to shared/ui 2026-04-18 15:53:01 +03:00
Ilia Mashkov db2d7b78dd fix: fix indentation, export ClassValue, add object-syntax test 2026-04-18 15:52:05 +03:00
Ilia Mashkov f4c95d5ea6 feat: add cn utility to shared/lib 2026-04-18 15:49:24 +03:00
Ilia Mashkov 38d7a59e1e fix: add h6 to heading selector and display:block to grain overlay 2026-04-18 15:48:29 +03:00
Ilia Mashkov 939884c95d fix: expose all semantic color tokens in @theme inline block 2026-04-18 15:46:40 +03:00