JSTN Portfolio Skill
This skill defines how AI agents should work with the JSTN portfolio codebase.
Overview
The JSTN portfolio is a Next.js 14 application built with TypeScript, Tailwind CSS, and Framer Motion. This skill provides guidelines for maintaining consistency, following conventions, and understanding the project structure.
Project Structure
code
portfolio/ ├── app/ # Next.js App Router │ ├── layout.tsx # Root layout │ ├── page.tsx # Landing page │ ├── about/ # About page │ ├── experience/ # Experience page │ └── projects/ # Projects pages ├── components/ # React components │ ├── sections/ # Page sections │ ├── Navbar.tsx # Navigation │ └── Footer.tsx # Footer ├── lib/ # Utilities ├── docs/ # Documentation (MDX) ├── public/ # Static assets └── skills/ # Agent skills
File Naming Conventions
- •Components: PascalCase (e.g.,
Hero.tsx,TechStackDescription.tsx) - •Pages: lowercase with hyphens (e.g.,
page.tsx,about/page.tsx) - •Utilities: camelCase (e.g.,
colors.ts,utils.ts) - •Documentation: kebab-case (e.g.,
react-best-practices.mdx)
Code Style Rules
DO
- •✅ Use TypeScript for all new files
- •✅ Use functional components with hooks
- •✅ Use Tailwind CSS for styling
- •✅ Place long-form content in MDX files under
docs/ - •✅ Use Next.js Image component for images
- •✅ Follow React Best Practices (see
docs/performance/) - •✅ Use semantic HTML elements
- •✅ Implement proper loading and error states
- •✅ Use Server Components by default, Client Components when needed
DON'T
- •❌ Don't put long-form copy directly in React components
- •❌ Don't use inline styles (use Tailwind classes)
- •❌ Don't create unnecessary Client Components
- •❌ Don't ignore accessibility (use proper ARIA labels)
- •❌ Don't commit large binary files to git
- •❌ Don't use
anytype in TypeScript (use proper types)
Component Patterns
Page Sections
All page sections should be in components/sections/{page-name}/:
- •Landing page sections:
components/sections/landing/ - •About page sections:
components/sections/about/ - •Experience sections:
components/sections/experience/
Component Structure
tsx
'use client' // Only if needed
import { ... } from '...'
export default function ComponentName() {
// Component logic
return (
<section className="...">
{/* Content */}
</section>
)
}
Styling Guidelines
Color Usage
Use the design system colors from lib/colors.ts:
- •Theme:
#F8F8F8 - •Background Dark:
#424242 - •Background Accent:
#1342FF - •Button:
#A8CEFF - •Icons:
#484848 - •Font:
#383838
Tailwind Classes
- •Use Tailwind utility classes
- •Create custom utilities in
tailwind.config.jsif needed - •Use CSS variables for dynamic colors
Content Management
Documentation
- •Long-form content →
docs/*.mdx - •Short descriptions → Component props or constants
- •Blog posts →
docs/blog/(future)
Images
- •Store in
public/directory - •Use Next.js Image component
- •Optimize images before adding
- •Use descriptive filenames
Performance Rules
Follow React Best Practices (see docs/performance/react-best-practices.mdx):
- •Eliminate waterfalls (parallel data fetching)
- •Reduce bundle size (code splitting, lazy loading)
- •Optimize server performance (Server Components)
- •Minimize re-renders (memoization)
- •Use proper loading states
Design System
Follow the design system defined in:
- •
docs/design-system/ui-ux-pro-max-notes.mdx - •Color palette from
lib/colors.ts - •Typography: Inter font family
Git Workflow
- •Use conventional commit messages
- •Create feature branches for new work
- •Keep commits focused and atomic
- •Use the commit scripts in
package.json
Testing Checklist
Before submitting changes:
- • TypeScript compiles without errors
- • No console errors in browser
- • Responsive design works (mobile, tablet, desktop)
- • Images load correctly
- • Links work properly
- • Accessibility basics (keyboard navigation, screen readers)
Resources
Questions?
If unsure about a pattern or convention, check:
- •Existing similar components
- •Documentation in
docs/ - •React Best Practices guide