Digital Experience Specialist
Home Credit
Delivered responsive UI/UX designs for loan acquisition, employee recognition, and installment calculator products by translating requirements into lo-fi and hi-fi prototypes using Figma and Webflow.
CSS variables in globals.css, consumed via Tailwind utility classes.
Semantic color tokens. The same grid is shown in light and dark — dark values resolve inside a .dark container.
The brand color scale (selective yellow), 50–950. Theme-independent. --accent is curious-400 in both modes; --accent-foreground is curious-100 (light) / curious-950 (dark); --ring is curious-200 (light) / curious-800 (dark). Use the scale directly via bg-curious-* / text-curious-* utilities.
Geist Sans (font-sans) and Geist Mono (font-mono). Sizing uses Tailwind defaults — no custom scale token.
The quick brown fox jumps over the lazy dog
The quick brown fox jumps over the lazy dog
text-xs — Aa
text-sm — Aa
text-base — Aa
text-lg — Aa
text-xl — Aa
text-2xl — Aa
text-3xl — Aa
font-normal
font-medium
Base --radius is 0.25rem; sm / md / lg / xl scale around it.
shadow-edge — a hairline outer + inset ring used on buttons, tabs and embeds.
The fadeIn keyframe via .animate-fade-in — opacity + 10px rise, runs once on mount.
The building blocks every page composes from.
Renders an <a> when href is set, otherwise a <button>.
variant?: 'primary' | 'secondary' | 'link'; href?; disabled?; type?; onClick?
Discrete pill nav — the homepage #main-tab-nav. Inactive tabs collapse to icon-only (equal padding); the active tab, or one being hovered/focused, expands to reveal its label, and activating a tab sweeps a shine. Renders a Next <Link> when href is set.
label; icon?; active?; href?; onClick?
Home link with the SVG logo. Also used in the header above and in StickyHeader.
className?
Post listings and third-party link previews.
Composes ExpandableText, ImageLightbox and LinkEmbed. Variants below cover text, read-more, image, and the three embed types.
avatar*, title, subtitle?, date?, category?, content?, href?, readMore?, imageSrc?, linkPreview?
Avatar + expandable text
Jun 2026I am a product designer focused on fintech and banking. This paragraph is deliberately long so it overflows three lines and reveals the inline more / less toggle that ExpandableText renders when its content exceeds the clamp.
Read-more variant (fallback avatar icon)
May 2026I am a product designer focused on fintech and banking. This paragraph is deliberately long so it overflows three lines and reveals the inline more / less toggle that ExpandableText renders when its content exceeds the clamp.
Read moreWith image (opens in ImageLightbox)
Apr 2026Tap the image to open the zoom + pan lightbox.

With generic link preview
Mar 2026With YouTube preview
Feb 2026With Instagram preview
Jan 2026Detects YouTube / Instagram / generic URLs and renders the right embed. Extend here for new types — never branch inside Card.
preview: CardLinkPreview
Shows a skeleton while loading. Falls back from the site's own favicon to Google's favicon service (when siteUrl is set), then to a globe icon on error/timeout.
src?; siteUrl?; className?
Thumbnail with shimmer placeholder and globe fallback.
src?
Clamps to 3 lines and reveals a more/less toggle on overflow.
text; className?
I am a product designer focused on fintech and banking, where I turn dense, regulation-heavy flows into interfaces people can actually understand. Over the past several years I have shipped onboarding, payments and dashboard experiences for wallets, neobanks and lending products. This paragraph is intentionally long — well past three lines — so the ExpandableText clamp kicks in and the inline more / less toggle is revealed. Tap more to read the full text, then less to collapse it back down to the clamped preview.
Click to open a zoom (0.5x–5x) / pan / pinch overlay with a 1x tilt effect.
src; alt; className?

GSAP-driven shimmer placeholders (respect prefers-reduced-motion).
className?
Placeholder matching the Card layout.
Stacked CardSkeletons used as a Suspense fallback.
count? = 5
Most recent
Self-contained, prop-less sections with hardcoded résumé content.
Intro paragraph with a GSAP SplitText word-reveal on mount.
By day, I'm a Product Manager. The rest of time, I'm a UI/UX Designer & serial tinkerer.
Certified PSPO I
Scrum.org · 2025
Product-led Certification
Mind The Product · 2025
AI for Product Management
Mind The Product · 2025
Product Discovery Certification
Mind The Product · 2025
Product Management Basic Certification
Mind The Product · 2024
Generative AI Overview for Project Managers
Project Management Institute · 2024
Digital Product Management
University of Virginia Darden · 2024
Start the UX Design Process
Google · 2024
Foundations of User Experience
Google · 2024
Excellent Public Speaking & Impactful Presentation
TALKINC · 2020
Introduction of Business Management
King's College London · 2020
Digital Skills: User Experience
Accenture · 2020
Introduction to Blockchain Technologies
INSEAD · 2019
Bridging Gap between Strategy Design & Delivery
Brightline Initiative · 2019
Larger interactive components.
Searchable, filterable logo gallery (showing a sample slice of the real idn-finlogos data).
logos: LogoEntry[]; categories: CategoryEntry[]
Indonesian fintech & finance logos, free to use.
Showing all 18 logos
Continuous feed loader: an IntersectionObserver pulls the next page via the loadMorePosts Server Action as the sentinel nears the viewport, shows a shimmer placeholder, then appends cards below — so scroll position is preserved. Live on the homepage feed.
category; initialOffset; initialHasMore; pageSize
Scroll the homepage feed to the bottom to see it stream the next page in with a shimmer placeholder (no “load more” click).
Providers, layout scaffold and full-screen layers. These are already active on this page or wrap the whole app, so they are documented rather than mounted a second time.
The scaffold wrapping THIS page — owns the centered max-w-[700px] column with side borders, the StickyHeader, the ScrollToTopButton and the Footer.
children; stickyHeaderContent?; stickyHeaderWatchId?; className?
Slides in on scroll with SiteLogo + HeaderActions (scroll this page to see it). Custom content is passed via PageShell's stickyHeaderContent.
children?; watchElementId?
Floating bottom-right button that appears after ~300px of scroll — active on this page now. Uses native smooth scrolling.
Wraps the app in app/layout.tsx and registers GSAP ScrollTrigger. Scrolling itself is native (CSS scroll-behavior), so #anchor links work normally.
Already rendered at the bottom of this page by PageShell — never mount a second one.
Full-screen fixed aurora (Aceternity-derived CSS gradients, portaled to body, z-[-1]): configurable colors / blur / speed / opacity, respects prefers-reduced-motion. Not the site background — Home and About use a plain solid background — kept here as an available option, and never mounted on this page.
config?
Used internally by LinkEmbed for Instagram URLs — see the Instagram example in Cards & Embeds above.
postId