diff --git a/app/layout.tsx b/app/layout.tsx index 9f157ef..d8a13e6 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -16,8 +16,8 @@ const outfit = Outfit({ }); export const metadata: Metadata = { - title: "Andrés Sánchez - Senior iOS Engineer", - description: "Senior iOS Engineer with 8+ years delivering resilient mobile banking apps for millions of users across Latin America.", + title: "Andrés Sánchez - Senior Engineer", + description: "Senior Engineer with 8+ years delivering resilient mobile banking apps for millions of users across Latin America.", }; export const viewport: Viewport = { @@ -41,7 +41,7 @@ export default function RootLayout({
- + {children} diff --git a/components/sections/hero.tsx b/components/sections/hero.tsx index d2ca048..3661faf 100644 --- a/components/sections/hero.tsx +++ b/components/sections/hero.tsx @@ -30,7 +30,7 @@ export async function Hero() {
-
+
Contact Me + + GitHub +
diff --git a/components/ui/tactile-button.tsx b/components/ui/tactile-button.tsx index edb722c..7132824 100644 --- a/components/ui/tactile-button.tsx +++ b/components/ui/tactile-button.tsx @@ -3,12 +3,14 @@ import { ReactNode } from "react" interface Props { href?: string + target?: string + rel?: string onClick?: () => void className?: string children: ReactNode } -export function TactileButton({ href, onClick, className = "", children }: Props) { +export function TactileButton({ href, target, rel, onClick, className = "", children }: Props) { const base = `relative overflow-hidden group flex items-center justify-center active:scale-95 transition-transform duration-100 ${className}` const shine = ( + {children} {shine} diff --git a/public/projects/bsc-thesis-3d-printer.webp b/public/projects/bsc-thesis-3d-printer.webp new file mode 100644 index 0000000..b8dfdde Binary files /dev/null and b/public/projects/bsc-thesis-3d-printer.webp differ diff --git a/public/projects/msc-ml-projects.webp b/public/projects/msc-ml-projects.webp new file mode 100644 index 0000000..fcd30cf Binary files /dev/null and b/public/projects/msc-ml-projects.webp differ diff --git a/src/infrastructure/repositories/in-memory-about-repository.ts b/src/infrastructure/repositories/in-memory-about-repository.ts index b110b70..0afa23d 100644 --- a/src/infrastructure/repositories/in-memory-about-repository.ts +++ b/src/infrastructure/repositories/in-memory-about-repository.ts @@ -6,15 +6,16 @@ export class InMemoryAboutRepository implements AboutRepository { return { name: "Andrés Sánchez", heroDescription: [ - "Senior Mobile & Frontend Engineer with 8+ years of experience delivering secure, high-performance banking platforms for millions of users.", - "Specializing in iOS native architecture, React Native bridges, and React microfrontends.", - "Proven track record in FinTech security compliance, CI/CD automation, and high-volume mobile systems.", + "Senior Software Engineer with 8+ years of experience delivering secure, high-performance banking platforms for millions of users.", + "iOS-native at the core, with React Native bridging and React microfrontends on the hybrid side.", + "Deep background in FinTech security compliance, CI/CD automation, and high-volume mobile systems.", "Endurance athlete and coffee enthusiast.", "Structure creates freedom, details create intuition, discipline creates flow." ], bio: [ - "Andrés has spent 8+ years building resilient mobile banking apps and frontend platforms for millions of users—maintaining high-stability operations under strict SLAs and high-volume production loads.", - "His work spans the full mobile and hybrid stack, with deep expertise in Swift/iOS native module development, React Native, and React microfrontends. He focuses on clean architecture, security compliance (PCI DSS, OWASP MASVS, ISO 27001), and end-to-end telemetry observability.", + "I've spent 8+ years building resilient mobile banking apps and frontend platforms for millions of users, maintaining high-stability operations under strict SLAs and high-volume production loads.", + "My work spans the full mobile and hybrid stack, with deep expertise in Swift/iOS native module development, React Native, and React microfrontends. I focus on clean architecture, security compliance (PCI DSS, OWASP MASVS, ISO 27001), and end-to-end telemetry observability.", + "I hold an MSc in Applied Computer Science from Vrije Universiteit Brussel (Distinction), with a thesis comparing statistical language models against cognitive architectures for AI explainability, and hands-on ML projects in PyTorch and scikit-learn.", ], stats: [ { label: "Years of Experience", value: "8+" }, @@ -23,7 +24,8 @@ export class InMemoryAboutRepository implements AboutRepository { ], skills: [ "Swift", "SwiftUI", "UIKit", "Combine", - "React 18", "TypeScript", "React Native", "Cordova", + "React 18", "TypeScript", "React Native", + "Python", "PyTorch", "Keras", "NumPy", "scikit-learn", "Clean Architecture", "VIPER", "MVVM-C", "Server-Driven UI", "Microfrontends", "Jest", "XCTest", "TDD", "Fastlane", "CI/CD", "GitHub Actions", diff --git a/src/infrastructure/repositories/in-memory-experience-repository.ts b/src/infrastructure/repositories/in-memory-experience-repository.ts index 6feeb37..ab831a1 100644 --- a/src/infrastructure/repositories/in-memory-experience-repository.ts +++ b/src/infrastructure/repositories/in-memory-experience-repository.ts @@ -9,7 +9,7 @@ export class InMemoryExperienceRepository implements ExperienceRepository { year: "2023 - 2025", title: "Senior Software Engineer (iOS · React / React Native)", company: "iuvity (Todo1 Services Inc.)", - description: "Senior Software Engineer and platform technical reference for iuviBANKING—iuvity's white-label banking SaaS deployed across regional financial institutions. Served as the quality certification gatekeeper for production handovers. Architected the AppShell web-to-native bridge contract, engineered React microfrontends, and authored secure Swift/Objective-C native modules for the React Native container.", + description: "Senior Software Engineer and platform technical reference for iuviBANKING, iuvity's white-label banking SaaS deployed across regional financial institutions. Served as the quality certification gatekeeper for production handovers. Architected the AppShell web-to-native bridge contract, engineered React microfrontends, and authored secure Swift/Objective-C native modules for the React Native container.", imagePath: '/iuvity.jpeg', color: "text-green-600" }, @@ -18,7 +18,7 @@ export class InMemoryExperienceRepository implements ExperienceRepository { year: "2020 - 2023", title: "Senior iOS Engineer", company: "iuvity (Todo1 Services Inc.)", - description: "Engineered high-availability mobile banking solutions for Bancolombia (10M+ users). Achieved 99.9% crash-free session rates while meeting strict 99.5% system availability SLAs. Modernized codebase architectures from legacy MVC to VIPER and MVVM-C, reducing coupling and enforcing an 80%+ unit testing standard. Delivered secure, regulatory-compliant mobile features (FaceID, Apple Pay, freeRASP).", + description: "Engineered high-availability mobile banking solutions for Bancolombia (10M+ users). Achieved 99.9% crash-free session rates while meeting strict 99.5% system availability SLAs. Modernized the codebase architecture from legacy MVC to VIPER and MVVM-C, reducing coupling and enforcing an 80%+ unit testing standard. Delivered secure, regulatory-compliant mobile features (FaceID, Apple Pay, freeRASP).", imagePath: '/iuvity.jpeg', color: "text-green-700 dark:text-green-500" }, @@ -26,8 +26,8 @@ export class InMemoryExperienceRepository implements ExperienceRepository { id: "2018", year: "2018 - 2020", title: "MSc Applied Computer Science", - company: "Vrije Universiteit Brussel — Brussels, Belgium", - description: "Government-funded scholarship. Graduated with Distinction. Thesis: Minimalistic AI Architectures for Language Models — developed a cognitive architecture for explainable AI bridging statistical language modeling and brain-inspired predictive processing.", + company: "Vrije Universiteit Brussel", + description: "Government-funded scholarship. Graduated with Distinction. Thesis: Minimalistic AI Architectures for Language Models. Developed a cognitive architecture for explainable AI that connects statistical language modeling with brain-inspired predictive processing.", imagePath: '/vub.jpeg', color: "text-sky-600" }, @@ -45,7 +45,7 @@ export class InMemoryExperienceRepository implements ExperienceRepository { year: "2015 - 2017", title: "iOS Developer", company: "Bayteq Cia Ltda", - description: "Built the Supercines Cinema App from concept to App Store, implementing custom seat-selection UI SDKs and PCI DSS-compliant payment integrations. Engineered white-label mobile banking blueprints for Produbanco and integrated biometric identity verification (FacePhi) for Banco Bolivariano.", + description: "Built the Supercines Cinema App from concept to App Store, with custom seat-selection UI SDKs and PCI DSS-compliant payment integrations. Engineered white-label mobile banking blueprints for Produbanco and integrated biometric identity verification (FacePhi) for Banco Bolivariano.", imagePath: '/bayteq.jpeg', color: "text-sky-700 dark:text-sky-400" } diff --git a/src/infrastructure/repositories/in-memory-project-repository.ts b/src/infrastructure/repositories/in-memory-project-repository.ts index 1e5a7a0..8fbed80 100644 --- a/src/infrastructure/repositories/in-memory-project-repository.ts +++ b/src/infrastructure/repositories/in-memory-project-repository.ts @@ -6,7 +6,7 @@ export class InMemoryProjectRepository implements ProjectRepository { const iuvibanking: Project = { id: 'iuvibanking', title: 'iuviBANKING Platform', - role: 'Senior Software Engineer — Platform Ownership', + role: 'Senior Software Engineer, Platform Ownership', description: 'Technical reference and quality certification gatekeeper across React microfrontends, React Native shells, and iOS native modules, responsible for stable production handovers.', challenge: 'Establishing zero-defect handoff protocols across independent product and operations teams, and resolving critical cross-layer failures through technical influence rather than formal authority.', techStack: ['React', 'React Native', 'Swift', 'TypeScript', 'AWS', 'Modyo DXP', 'OIDC', 'Server-Driven UI'], @@ -27,7 +27,7 @@ export class InMemoryProjectRepository implements ProjectRepository { id: 'supercines', title: 'Supercines iOS App', role: 'iOS Developer', - description: 'Cinema booking application featuring a custom seat-selection SDK, PCI DSS-compliant payment integrations, and offline persistence.', + description: 'Cinema booking app with a custom seat-selection SDK, PCI DSS-compliant payment integrations, and offline persistence.', challenge: 'Building a high-performance interactive seat selection UI SDK using UIKit with custom touch handling, and securing transactional pipelines under strict PCI compliance.', techStack: ['Swift', 'Objective-C', 'UIKit', 'Core Data', 'MapKit', 'PCI DSS'], imagePath: '/projects/supercines.webp', @@ -46,13 +46,33 @@ export class InMemoryProjectRepository implements ProjectRepository { const msThesis: Project = { id: 'msc-thesis-ppm-idyot', title: 'PPM★ vs IDyOT: Statistical Language Modeling', - role: 'MSc Researcher — VUB AI Lab', + role: 'MSc Researcher, VUB AI Lab', description: 'MSc thesis at Vrije Universiteit Brussel comparing PPM★, a compression-based language model, against IDyOT, a cognitive architecture for hierarchical prediction. Implemented both algorithms in Python, validated against established benchmarks, and identified the optimal IDyOT configuration via KL divergence analysis.', challenge: 'PPM★ achieves high prediction accuracy as a descriptive black box but offers no cognitive explanation. The challenge was formally documenting IDyOT\'s within-layer interactions (implicit in prior literature), implementing a zero-probability smoothing fix, and connecting statistical accuracy to cognitive plausibility.', techStack: ['Python', 'PPM★', 'IDyOT', 'Word2Vec', 'Statistical NLP', 'Cognitive Architecture', 'Information Theory'], imagePath: '/projects/msc-thesis.webp', } - return [iuvibanking, bancolombia, personalSite, msThesis, supercines] + const bscThesis: Project = { + id: 'bsc-thesis-3d-printer', + title: '3D Print Server with Web UI', + role: 'BSc Researcher, Universidad Técnica de Ambato', + description: 'BSc research paper building a RepRap-based 3D printer with an embedded Raspberry Pi print server and OctoPrint web interface for real-time control and video monitoring over LAN.', + challenge: 'Replacing a full PC with a Raspberry Pi embedded inside the printer structure, integrating mjpg-streamer for live video streaming, and assembling a complete CAD-to-print pipeline using entirely open-source tools.', + techStack: ['Raspberry Pi', 'OctoPrint', 'Raspbian', 'mjpg-streamer', 'RepRap', 'Arduino', 'G-code', 'FreeCAD'], + imagePath: '/projects/bsc-thesis-3d-printer.webp', + } + + const mlProjects: Project = { + id: 'msc-ml-projects', + title: 'AI/ML Projects at VUB', + role: 'MSc Student — AI Lab, Vrije Universiteit Brussel', + description: 'AI/ML projects at VUB: implemented ESPCN for image super-resolution in PyTorch (29.7 dB PSNR on BSD300), built logistic regression from scratch on three months of personal health data, and separately implemented kNN, CNNs, backpropagation from scratch, PCA, k-Means, DBSCAN, and collaborative filtering.', + challenge: 'Reproducing ESPCN results with 800 training images against a paper trained on 50,000: the 2-3 dB gap traces back to center-crop-only sampling and missing Gaussian pre-blur on LR inputs. For logistic regression, the meaningful feature was not raw calorie intake but daily excess over budget.', + techStack: ['Python', 'PyTorch', 'Keras', 'NumPy', 'scikit-learn'], + imagePath: '/projects/msc-ml-projects.webp', + } + + return [iuvibanking, bancolombia, personalSite, msThesis, mlProjects, supercines, bscThesis] } }