From 360fb2d3d67a8eb4dc51d2bead6218f199afe856 Mon Sep 17 00:00:00 2001 From: Ameya Shenoy Date: Fri, 13 Jun 2025 18:19:22 +0530 Subject: [PATCH] feat: portfolio desktop light done Signed-off-by: Ameya Shenoy --- frontend/package-lock.json | 22 ++ frontend/package.json | 1 + frontend/src/app/globals.css | 10 +- frontend/src/app/layout.tsx | 17 +- frontend/src/app/page.tsx | 6 +- frontend/src/app/portfolio/page.tsx | 253 +++++++++++++++++- .../src/components/CustomCircleCursor.tsx | 3 +- frontend/src/components/Navbar.tsx | 4 +- 8 files changed, 304 insertions(+), 12 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2093f26..bcd5994 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,6 +8,7 @@ "name": "one", "version": "0.1.0", "dependencies": { + "@iconify/react": "^6.0.0", "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-slot": "^1.2.3", "class-variance-authority": "^0.7.1", @@ -106,6 +107,27 @@ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", "license": "MIT" }, + "node_modules/@iconify/react": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@iconify/react/-/react-6.0.0.tgz", + "integrity": "sha512-eqNscABVZS8eCpZLU/L5F5UokMS9mnCf56iS1nM9YYHdH8ZxqZL9zyjSwW60IOQFsXZkilbBiv+1paMXBhSQnw==", + "license": "MIT", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.2", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index 47ef107..607c5b4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "@iconify/react": "^6.0.0", "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-slot": "^1.2.3", "class-variance-authority": "^0.7.1", diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index 0344a83..e142c10 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -140,6 +140,12 @@ } } -* { - cursor: none; +@media (min-width: 768px) { + /* Tailwind's md breakpoint */ + * { + cursor: none; + } + a:hover { + cursor: pointer; + } } diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index a3942eb..30e8e5b 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -1,6 +1,12 @@ import type { Metadata } from "next"; import { ThemeProvider } from "@/components/theme-provider"; -import { Geist, Geist_Mono, Space_Grotesk, Space_Mono } from "next/font/google"; +import { + Geist, + Geist_Mono, + Space_Grotesk, + Space_Mono, + Inter, +} from "next/font/google"; import "./globals.css"; import { NavigationMenu } from "@/components/Navbar"; @@ -27,6 +33,11 @@ const spaceMono = Space_Mono({ subsets: ["latin"], }); +const interSans = Inter({ + variable: "--font-inter-sans", + subsets: ["latin"], +}); + export const metadata: Metadata = { title: "Ameya Shenoy", description: @@ -41,7 +52,7 @@ export default function RootLayout({ return ( -
+
{children} diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index 19636be..2f8fd76 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -4,9 +4,11 @@ import { World } from "@/components/PhysicsSimulation"; export default function Home() { return (
- + <> + - + +
); } diff --git a/frontend/src/app/portfolio/page.tsx b/frontend/src/app/portfolio/page.tsx index 8a05596..b9a139a 100644 --- a/frontend/src/app/portfolio/page.tsx +++ b/frontend/src/app/portfolio/page.tsx @@ -1,7 +1,254 @@ -export default function Portfolio() { +import { MapPin, Code, Briefcase, FileUser } from "lucide-react"; +import { headers } from "next/headers"; +import { Icon } from "@iconify/react"; +import Link from "next/link"; + +export default async function Portfolio() { + const headersList = await headers(); + const ip = headersList.get("x-forwarded-for"); + + // Replace with your chosen IP geolocation API + const response = await fetch(`https://ipapi.co/${ip}/json/`); + const { country } = await response.json(); + let isIndianVisitor = false; + if (country == "IN") { + isIndianVisitor = true; + } + console.log(ip, isIndianVisitor); + + const skillsLeft = { + "Programming Languages": { + Python: "vscode-icons:file-type-python", + JavaScript: "vscode-icons:file-type-js-official", + TypeScript: "vscode-icons:file-type-typescript-official", + Golang: "material-icon-theme:go", + }, + "Web Frameworks": { + FastAPI: "devicon:fastapi", + Django: "material-icon-theme:django", + Flask: "simple-icons:flask", + ReactJS: "material-icon-theme:react", + "Next.js": "devicon:nextjs", + }, + AI: { + LangChain: "simple-icons:langchain", + Livekit: null, + ElevenLabs: "simple-icons:elevenlabs", + Ollama: "simple-icons:ollama", + vllm: null, + }, + Databases: { + Postgres: "devicon:postgresql", + Redis: "devicon:redis", + ClickHouse: "devicon:clickhouse", + etcd: "logos:etcd", + Meilisearch: "logos:meilisearch", + Typesense: "logos:typesense-icon", + qdrant: "logos:qdrant-icon", + MySQL: "logos:mysql-icon", + }, + }; + const skillsRight = { + DevOps: { + Kubernetes: "material-icon-theme:kubernetes", + Ansible: "devicon:ansible", + Docker: "material-icon-theme:docker", + // Vagrant: "material-icon-theme:vagrant", + // "VMware ESXi": "carbon:logo-vmware", + Nomad: "devicon:nomad", + Terraform: "material-icon-theme:terraform", + Bash: "devicon:bash", + // Packer: "devicon:packer", + // "HashiCorp Vault": "devicon:vault", + Jenkins: "material-icon-theme:jenkins", + // KVM: "simple-icons:qemu", + // Nagios: null, + Prometheus: "devicon:prometheus", + Grafana: "devicon:grafana", + // InfluxDB: "devicon:influxdb", + Sentry: "material-icon-theme:sentry", + Kafka: "devicon:apachekafka", + // Selenium: "devicon:selenium", + }, + "Cloud Providers": { + AWS: "logos:aws", + "Microsoft Azure": "material-icon-theme:azure", + "Google Cloud Platform GCP": "material-icon-theme:gcp", + DigitalOcean: "devicon:digitalocean", + // Scaleway: "simple-icons:scaleway", + // Hetzner: "simple-icons:hetzner", + Cloudflare: "devicon:cloudflare", + }, + Robotics: { + "Robot Operating System ROS": "devicon:ros", + }, + "Spoken Languages": { + English: null, + Hindi: null, + Marathi: null, + Konkani: null, + }, + }; + + const workExperience = [ + { + company: "Grapevine", + link: "https://grapevine.in", + title: "1st Engineer / Engineering Lead / CTO", + tenure: "May 2022 - Present", + location: "Bengaluru", + summary: + "Led engineering teams from inception to $3M seed funding, architecting scalable Django/PostgreSQL/Kubernetes backend infrastructure supporting 600k+ users with 99.9% uptime. Built real-time Kafka/ClickHouse pipelines (1M+ events/day) boosting feature adoption 25%, and hybrid Qdrant/Meilisearch systems increasing engagement 80%. Created AI-driven interview platforms using LiveKit/ElevenLabs for personalized candidate experiences at scale.", + }, + { + company: "e-Yantra, IIT Bombay", + link: "https://portal.e-yantra.org/", + title: "Project Engineer", + tenure: "Apr 2021 - Dec 2023", + location: "Mumbai", + summary: + "Developed a modular drone platform using Raspberry Pi, NVIDIA Jetson AGX, ZED camera, GoPro, GPS, and optical flow sensors with ROS, enabling real-time video streaming, flight data aggregation, cloud photogrammetry, and autonomous navigation. Designed containerized simulation environments for secure robotics/AI testing and engineered GPU slicing frameworks for optimized ML resource distribution across virtual machines.", + keyPoints: [ + "Developed a modular drone platform integrating Raspberry Pi, NVIDIA Jetson AGX, ZED stereo camera, GoPro, GPS, and optical flow sensors using ROS, enabling real-time video streaming, flight data aggregation, cloud-based photogrammetry, and autonomous navigation capabilities", + "Designed and implemented a containerized simulation platform, enabling secure, isolated, and reproducible evaluation of robotics and AI workloads", + "Engineered a GPU slicing and distribution framework for NVIDIA GPUs, optimizing resource utilization across multiple virtual machines for scalable machine learning training and browser-based remote Linux workstations", + ], + }, + { + company: "BrowserStack", + link: "https://browserstack.com", + title: "Cloud Infrastructure and Security Engineer", + tenure: "May 2019 - Mar 2021", + location: "Mumbai", + summary: + "Reduced AWS costs by 15% ($150k/year) via reserved instances, snapshots, and S3 lifecycle policies while ensuring 99.9% uptime SLA. Enhanced security with CIS Controls, 99.5% DMARC compliance, VPN deployment, and Cloudflare optimization for 3x faster page loads. Migrated critical systems with <0.1% downtime and established robust disaster recovery.", + keyPoints: [ + "Reduced AWS costs by 15% on $1M annual bill through reserved EC2 instances optimization, snapshot management, and S3 lifecycle policies while maintaining 99.9% uptime SLA", + "Enhanced security posture by implementing CIS Controls, improving DMARC rating to 99.54%, setting up VPN for data centers, and deploying Cloudflare to reduce page load times by 3x", + "Orchestrated critical infrastructure migrations with <0.1% downtime, and executed disaster recovery planning for AWS", + ], + }, + { + company: "Frappe Technologies Pvt. Ltd. / ERPNext", + link: "https://frappe.io/erpnext", + title: "Software Engineer (Research and Development)", + tenure: "Jun 2017 - Nov 2018", + location: "Mumbai", + summary: + "Implemented email tracking pixels in outbound campaigns to monitor engagement and enable targeted follow-ups, boosting response rates by 18%. Developed the Bench Manager GUI for real-time monitoring of Frappe-hosted sites, presented at the ERPNext Conference, which streamlined system administration tasks through Socket.IO-powered live updates.", + keyPoints: [ + "Implemented email tracking pixels in outbound campaigns, enabling email engagement tracking and allowing targeted follow-ups that boosted response rates by 18%", + "Developed Bench Manager GUI for real-time monitoring of Frappe-hosted sites, presented at ERPNext Conference, streamlining system administration tasks and live updates through Socket.IO", + ], + }, + ]; + return ( -
- This is portfolio +
+
+
+
About Me
+ +
+ Download + +
+ +
+
+
+
+
Hi, I'm
+
+ Ameya Shenoy +
+
+
+
+ + Based in India +
+
+ + + Principal Engineer / Engineering Lead + +
+
+ + 8+ years experience +
+
+
+
+ Engineering lead with 8+ years of expertise in designing scalable + system architecture, leading high performing teams, and delivering + ai driven solutions while also maintaining the role of an individual + contributor. +
+
+
+
Key Skills
+
+
+ {Object.entries(skillsLeft).map(([topic, skillsMap]) => ( +
+
{topic}
+
+ {Object.entries(skillsMap).map(([language, icon]) => ( + + {language} + + ))} +
+
+ ))} +
+
+ {Object.entries(skillsRight).map(([topic, skillsMap]) => ( +
+
{topic}
+
+ {Object.entries(skillsMap).map(([language, icon]) => ( + + {language} + + ))} +
+
+ ))} +
+
+
+
+
Work Experience
+ {workExperience.map((job, index) => ( +
+
+ + {job.company} + +

{job.tenure}

+
+

{job.title}

+

+ {job.summary} +

+
+ ))} +
+
); } diff --git a/frontend/src/components/CustomCircleCursor.tsx b/frontend/src/components/CustomCircleCursor.tsx index a3fe4e0..8d4f0c8 100644 --- a/frontend/src/components/CustomCircleCursor.tsx +++ b/frontend/src/components/CustomCircleCursor.tsx @@ -1,4 +1,5 @@ "use client"; + import { useRef, useEffect, FC, useState } from "react"; import gsap from "gsap"; @@ -50,7 +51,7 @@ const GSAPCursor: FC = () => { }} />
+
+ {/*
+ */}
);