interface Developer {
name: string;
skills: string[];
interests: string[];
};
interface TechStack {
devOps: string[];
backend: string[];
frontend: string[];
frameworks: string[];
};
type ContactType = 'github' | 'linkedIn' | 'email';
const techStack: TechStack = {
devOps: [
'GitHub',
'Github Actions',
'Cloudflare',
'Docker',
'Terraform',
'AWS',
'Vercel',
'Prisma '
'CI/CD'
],
frontend: [
'React',
'Next.js',
'TailwindCSS',
'Material UI',
'CSS',
'HTML',
'Zustand',
'Shadcn/UI',
'tRPC',
'Socket.IO',
'XState',
'Zod',
],
backend: [
'Node.js',
'PostgreSQL',
'GraphQL',
'MongoDB',
'Express',
'Prisma',
'Drizzle',
'Neon DB',
'REST APIs'
],
frameworks: [
'Next.js',
'React',
'Express',
'Node.js',
'Astro',
'Svelte',
'Ruby on Rails'
],
languages: [
'TypeScript',
'JavaScript',
'Python',
'Ruby',
'C#',
'SQL'
]
};
// Developer profile
const me: Developer = {
name: 'Joel Mangin',
skills: [
...techStack.devOps,
...techStack.backend,
...techStack.frontend,
...techStack.frameworks,
...techStack.languages
],
interests: [
'Product Leadership', // Origin story was refactoring a sub-par feature
'User Experience', // Battle-tested product serving UHNWIs
'Performance Optimization' // If it's slow it may as well not exist
]
};
// Contact function
const contact = (type: ContactType): string => {
switch (type) {
case 'github':
return 'https://github.com/applesnort';
case 'linkedIn':
return 'https://www.linkedin.com/in/joel-mangin';
case 'email':
return '[email protected]';
default:
return 'Send message.';
}
};