Files
my-protfolio/src/data/skills.ts
Amirhossein Khalili f34bea05cd
Some checks failed
Test and deploy / Verify production build (push) Has been cancelled
Test and deploy / Deploy production (push) Has been cancelled
perf: optimize portfolio runtime delivery
Replace the blocking asset loader with progressive rendering, defer expensive media and Three.js work, and reduce hydration and animation costs. Move deployment from a static Nginx export to the standalone Next.js runtime with optimized dynamic images.
2026-09-09 12:43:37 +03:30

245 lines
6.8 KiB
TypeScript

export type DisciplineId =
| 'software-engineering'
| 'product-management'
| 'design-ux';
export interface SkillCategory {
name: string;
level: number;
}
export interface ToolItem {
id: string;
name: string;
icon: PortfolioImage;
}
export interface SkillDiscipline {
skills: SkillCategory[];
keywords: string[];
tools: ToolItem[];
}
export interface FilterTab {
id: DisciplineId;
label: string;
}
const tool = (id: string, name: string, icon = id): ToolItem => ({
id,
name,
icon: portfolioImage(`/images/tools/${icon}.png`, 72, 72),
});
const placeholderTool = (id: string, name: string): ToolItem => ({
id,
name,
icon: portfolioImage(`/images/tools/${id}.png`, 72, 72),
});
export const skillsByDiscipline: Record<DisciplineId, SkillDiscipline> = {
'software-engineering': {
skills: [
{ name: 'Backend', level: 5 },
{ name: 'Databases', level: 4 },
{ name: 'Testing & Quality', level: 3 },
{ name: 'System Design', level: 3 },
{ name: 'Frontend', level: 3 },
{ name: 'DevOps', level: 2 },
{ name: 'Web Scraping', level: 2 },
{ name: 'Version Control', level: 4 },
],
keywords: [
'Documentation',
'Authentication',
'Authorization',
'OAuth2',
'JWT',
'Caching',
'Rate Limiting',
'Throttling',
'WebSockets',
'Background Job',
'Web Scraping',
'Bash Scripting',
'Microservices',
'Performance Optimization',
'Third-Party Integration',
],
tools: [
tool('vscode', 'VS Code'),
tool('codex', 'Codex'),
tool('antigravity', 'Antigravity'),
tool('git', 'Git'),
tool('github', 'GitHub'),
tool('python', 'Python'),
tool('django', 'Django'),
tool('fastapi', 'FastAPI'),
tool('celery', 'Celery'),
tool('postgresql', 'PostgreSQL'),
tool('redis', 'Redis'),
tool('neo4j', 'Neo4j'),
tool('mongodb', 'MongoDB'),
tool('typescript', 'TypeScript'),
tool('react', 'React'),
tool('nextjs', 'Next.js'),
tool('linux', 'Linux'),
tool('docker', 'Docker'),
tool('nginx', 'Nginx'),
tool('caddy', 'Caddy'),
tool('minio', 'MinIO'),
tool('prometheus', 'Prometheus'),
tool('grafana', 'Grafana'),
tool('kubernetes', 'Kubernetes'),
],
},
'product-management': {
skills: [
{ name: 'Technical Product Management', level: 4 },
{ name: 'Product Strategy', level: 3 },
{ name: 'Product Analytics', level: 2 },
{ name: 'Roadmapping & Prioritization', level: 3 },
{ name: 'User Research', level: 3 },
{ name: 'Testing & Quality', level: 3 },
],
keywords: [
'Market Research',
'Competitive Analysis',
'Customer Segmentation',
'Personas',
'Jobs to Be Done',
'Value Proposition',
'Product-Market Fit',
'MVP Definition',
'RICE',
'MoSCoW',
'PRDs',
'Requirements Gathering',
'User Stories',
'Acceptance Criteria',
'Agile',
'Scrum',
'Sprint Planning',
'Kanban',
'Product Documentation',
'KPI Definition',
'OKRs',
'North Star Metrics',
'Funnel Analysis',
'Conversion Analysis',
'Retention Analysis',
'Churn Analysis',
'A/B Testing',
'Beta Testing',
'Usability Testing',
'Customer Interviews',
'Customer Journey Mapping',
'Engineering Collaboration',
'Design Collaboration',
'Go-to-Market',
'Technical Trade-offs',
'Technical Debt',
'Scalability',
'Performance',
],
tools: [
placeholderTool('notion', 'Notion'),
placeholderTool('mizito', 'Mizito'),
tool('github-projects', 'GitHub Projects', 'github'),
placeholderTool('jira', 'Jira'),
placeholderTool('porsline', 'Porsline'),
placeholderTool('mattermost', 'Mattermost'),
placeholderTool('figma', 'Figma'),
placeholderTool('figjam', 'Fig Jam'),
placeholderTool('sql', 'SQL'),
placeholderTool('power-bi', 'Power BI'),
placeholderTool('metabase', 'Metabase'),
placeholderTool('google-docs', 'Google Docs'),
placeholderTool('google-sheets', 'Google Sheets'),
placeholderTool('google-slides', 'Google Slides'),
placeholderTool('microsoft-office', 'Microsoft Office'),
placeholderTool('chatgpt', 'ChatGPT'),
placeholderTool('gemini', 'Gemini'),
placeholderTool('claude', 'Claude'),
],
},
'design-ux': {
skills: [
{ name: 'Visual Design', level: 4 },
{ name: 'UI Design', level: 3 },
{ name: 'UX Design', level: 2 },
{ name: 'User Research', level: 4 },
{ name: 'Product Thinking', level: 3 },
{ name: 'Prototyping', level: 3 },
{ name: 'Design Systems', level: 3 },
],
keywords: [
'Typography',
'Color Theory',
'Color Theory',
'Visual Hierarchy',
'Iconography & Imagery',
'Interface Patterns',
'Component Design',
'States',
'Interactions',
'Responsive Design',
'Design Consistency',
'User Flows',
'Information Architecture',
'Usability Principles',
'Accessibility',
'Surveys',
'Personas',
'User Segmentation',
'Problem Definition',
'Feature Prioritization',
'Success Metrics',
'Wireframing',
'Microinteractions',
'Motion & Transition Design',
'Component Libraries',
'Design Tokens',
'Pattern Documentation',
'Scalable Component Architecture',
'Design-Development Alignment',
'Usability Testing',
'A/B Testing',
'Storytelling',
'Design Collaboration',
'Go-to-Market',
'Technical Trade-offs',
'Technical Debt',
'Scalability',
'Performance',
],
tools: [
placeholderTool('figma', 'Figma'),
placeholderTool('figjam', 'Fig Jam'),
placeholderTool('framer', 'Framer'),
placeholderTool('adobe-illustrator', 'Adobe Illustrator'),
placeholderTool('adobe-photoshop', 'Adobe Photoshop'),
placeholderTool('adobe-xd', 'Adobe XD'),
placeholderTool('penpot', 'Penpot'),
placeholderTool('html', 'HTML'),
placeholderTool('css', 'CSS'),
placeholderTool('javascript', 'JavaScript'),
placeholderTool('tailwind', 'Tailwind'),
tool('vscode', 'VS Code'),
tool('github', 'GitHub'),
placeholderTool('chatgpt', 'ChatGPT'),
placeholderTool('gemini', 'Gemini'),
placeholderTool('claude-design', 'Claude Design'),
tool('codex', 'Codex'),
tool('antigravity', 'Antigravity'),
],
},
};
export const filterTabs: FilterTab[] = [
{ id: 'software-engineering', label: 'Software Engineering' },
{ id: 'product-management', label: 'Product Management' },
{ id: 'design-ux', label: 'Design & UX' },
];
import { portfolioImage, type PortfolioImage } from '@/types/media';