chore: fix prod issue
Signed-off-by: Ameya Shenoy <shenoy.ameya@gmail.com>
This commit is contained in:
parent
97ee0a1048
commit
ccbd82f730
1 changed files with 196 additions and 136 deletions
|
|
@ -4,145 +4,144 @@ import { Icon } from "@iconify/react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
||||||
export default async function Portfolio() {
|
export default async function Portfolio() {
|
||||||
const headersList = await headers();
|
// const headersList = await headers();
|
||||||
const ip = headersList.get("x-forwarded-for");
|
// const ip = headersList.get("x-forwarded-for");
|
||||||
|
// Replace with your chosen IP geolocation API - breaks on server
|
||||||
|
// 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);
|
||||||
|
|
||||||
// Replace with your chosen IP geolocation API
|
const skillsLeft = {
|
||||||
const response = await fetch(`https://ipapi.co/${ip}/json/`);
|
"Programming Languages": {
|
||||||
const { country } = await response.json();
|
Python: "vscode-icons:file-type-python",
|
||||||
let isIndianVisitor = false;
|
JavaScript: "vscode-icons:file-type-js-official",
|
||||||
if (country == "IN") {
|
TypeScript: "vscode-icons:file-type-typescript-official",
|
||||||
isIndianVisitor = true;
|
Golang: "material-icon-theme:go",
|
||||||
}
|
},
|
||||||
console.log(ip, isIndianVisitor);
|
AI: {
|
||||||
|
LangChain: "simple-icons:langchain",
|
||||||
|
Livekit: "",
|
||||||
|
ElevenLabs: "simple-icons:elevenlabs",
|
||||||
|
Ollama: "simple-icons:ollama",
|
||||||
|
vllm: "",
|
||||||
|
},
|
||||||
|
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",
|
||||||
|
},
|
||||||
|
"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",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const skillsRight = {
|
||||||
|
"Web Frameworks": {
|
||||||
|
FastAPI: "devicon:fastapi",
|
||||||
|
Django: "material-icon-theme:django",
|
||||||
|
"Next.js": "devicon:nextjs",
|
||||||
|
Flask: "simple-icons:flask",
|
||||||
|
ReactJS: "material-icon-theme:react",
|
||||||
|
},
|
||||||
|
|
||||||
// const skillsLeft = {
|
DevOps: {
|
||||||
// "Programming Languages": {
|
Kubernetes: "material-icon-theme:kubernetes",
|
||||||
// Python: "vscode-icons:file-type-python",
|
Ansible: "devicon:ansible",
|
||||||
// JavaScript: "vscode-icons:file-type-js-official",
|
Docker: "material-icon-theme:docker",
|
||||||
// TypeScript: "vscode-icons:file-type-typescript-official",
|
// Vagrant: "material-icon-theme:vagrant",
|
||||||
// Golang: "material-icon-theme:go",
|
// "VMware ESXi": "carbon:logo-vmware",
|
||||||
// },
|
Nomad: "devicon:nomad",
|
||||||
// AI: {
|
Terraform: "material-icon-theme:terraform",
|
||||||
// LangChain: "simple-icons:langchain",
|
Bash: "devicon:bash",
|
||||||
// Livekit: "",
|
// Packer: "devicon:packer",
|
||||||
// ElevenLabs: "simple-icons:elevenlabs",
|
// "HashiCorp Vault": "devicon:vault",
|
||||||
// Ollama: "simple-icons:ollama",
|
Jenkins: "material-icon-theme:jenkins",
|
||||||
// vllm: "",
|
// KVM: "simple-icons:qemu",
|
||||||
// },
|
// Nagios: null,
|
||||||
// Databases: {
|
Prometheus: "devicon:prometheus",
|
||||||
// Postgres: "devicon:postgresql",
|
Grafana: "devicon:grafana",
|
||||||
// Redis: "devicon:redis",
|
// InfluxDB: "devicon:influxdb",
|
||||||
// ClickHouse: "devicon:clickhouse",
|
Sentry: "material-icon-theme:sentry",
|
||||||
// etcd: "logos:etcd",
|
Kafka: "devicon:apachekafka",
|
||||||
// Meilisearch: "logos:meilisearch",
|
// Selenium: "devicon:selenium",
|
||||||
// Typesense: "logos:typesense-icon",
|
},
|
||||||
// qdrant: "logos:qdrant-icon",
|
Robotics: {
|
||||||
// MySQL: "logos:mysql-icon",
|
"Robot Operating System ROS": "devicon:ros",
|
||||||
// },
|
},
|
||||||
// "Cloud Providers": {
|
"Spoken Languages": {
|
||||||
// AWS: "logos:aws",
|
English: "",
|
||||||
// "Microsoft Azure": "material-icon-theme:azure",
|
Hindi: "",
|
||||||
// "Google Cloud Platform GCP": "material-icon-theme:gcp",
|
Marathi: "",
|
||||||
// DigitalOcean: "devicon:digitalocean",
|
Konkani: "",
|
||||||
// // Scaleway: "simple-icons:scaleway",
|
},
|
||||||
// // Hetzner: "simple-icons:hetzner",
|
};
|
||||||
// Cloudflare: "devicon:cloudflare",
|
|
||||||
// },
|
|
||||||
// };
|
|
||||||
// const skillsRight = {
|
|
||||||
// "Web Frameworks": {
|
|
||||||
// FastAPI: "devicon:fastapi",
|
|
||||||
// Django: "material-icon-theme:django",
|
|
||||||
// "Next.js": "devicon:nextjs",
|
|
||||||
// Flask: "simple-icons:flask",
|
|
||||||
// ReactJS: "material-icon-theme:react",
|
|
||||||
// },
|
|
||||||
//
|
|
||||||
// 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",
|
|
||||||
// },
|
|
||||||
// Robotics: {
|
|
||||||
// "Robot Operating System ROS": "devicon:ros",
|
|
||||||
// },
|
|
||||||
// "Spoken Languages": {
|
|
||||||
// English: "",
|
|
||||||
// Hindi: "",
|
|
||||||
// Marathi: "",
|
|
||||||
// Konkani: "",
|
|
||||||
// },
|
|
||||||
// };
|
|
||||||
|
|
||||||
// const workExperience = [
|
const workExperience = [
|
||||||
// {
|
{
|
||||||
// company: "Grapevine",
|
company: "Grapevine",
|
||||||
// link: "https://grapevine.in",
|
link: "https://grapevine.in",
|
||||||
// title: "1st Engineer / Engineering Lead / CTO",
|
title: "1st Engineer / Engineering Lead / CTO",
|
||||||
// tenure: "May 2022 - Present",
|
tenure: "May 2022 - Present",
|
||||||
// location: "Bengaluru",
|
location: "Bengaluru",
|
||||||
// summary:
|
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.",
|
"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",
|
company: "e-Yantra, IIT Bombay",
|
||||||
// link: "https://portal.e-yantra.org/",
|
link: "https://portal.e-yantra.org/",
|
||||||
// title: "Project Engineer",
|
title: "Project Engineer",
|
||||||
// tenure: "Apr 2021 - Dec 2023",
|
tenure: "Apr 2021 - Dec 2023",
|
||||||
// location: "Mumbai",
|
location: "Mumbai",
|
||||||
// summary:
|
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.",
|
"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: [
|
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",
|
"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",
|
"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",
|
"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",
|
company: "BrowserStack",
|
||||||
// link: "https://browserstack.com",
|
link: "https://browserstack.com",
|
||||||
// title: "Cloud Infrastructure and Security Engineer",
|
title: "Cloud Infrastructure and Security Engineer",
|
||||||
// tenure: "May 2019 - Mar 2021",
|
tenure: "May 2019 - Mar 2021",
|
||||||
// location: "Mumbai",
|
location: "Mumbai",
|
||||||
// summary:
|
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.",
|
"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: [
|
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",
|
"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",
|
"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",
|
"Orchestrated critical infrastructure migrations with <0.1% downtime, and executed disaster recovery planning for AWS",
|
||||||
// ],
|
],
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// company: "Frappe Technologies Pvt. Ltd. / ERPNext",
|
company: "Frappe Technologies Pvt. Ltd. / ERPNext",
|
||||||
// link: "https://frappe.io/erpnext",
|
link: "https://frappe.io/erpnext",
|
||||||
// title: "Software Engineer (Research and Development)",
|
title: "Software Engineer (Research and Development)",
|
||||||
// tenure: "Jun 2017 - Nov 2018",
|
tenure: "Jun 2017 - Nov 2018",
|
||||||
// location: "Mumbai",
|
location: "Mumbai",
|
||||||
// summary:
|
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.",
|
"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: [
|
keyPoints: [
|
||||||
// "Implemented email tracking pixels in outbound campaigns, enabling email engagement tracking and allowing targeted follow-ups that boosted response rates by 18%",
|
"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",
|
"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 (
|
return (
|
||||||
<main className="flex items-top justify-center font-[family-name:var(--font-spacegrotesk-sans)] pt-10 md:pt-20 pb-25 md:pb-0">
|
<main className="flex items-top justify-center font-[family-name:var(--font-spacegrotesk-sans)] pt-10 md:pt-20 pb-25 md:pb-0">
|
||||||
|
|
@ -190,6 +189,67 @@ export default async function Portfolio() {
|
||||||
contributor.
|
contributor.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="md:w-[40vw] w-[95vw] md:min-w-3xl">
|
||||||
|
<div className="text-3xl pb-10">Work Experience</div>
|
||||||
|
{workExperience.map((job, index) => (
|
||||||
|
<div key={index} className="">
|
||||||
|
<div className="flex items-center justify-between pb-5">
|
||||||
|
<Link
|
||||||
|
href={job.link}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className="text-xl underline"
|
||||||
|
>
|
||||||
|
{job.company}
|
||||||
|
</Link>
|
||||||
|
<p className="text-xl">{job.tenure}</p>
|
||||||
|
</div>
|
||||||
|
<p className="text-2xl text-red-500 pb-5">{job.title}</p>
|
||||||
|
<p className="text-gray-500 dark:text-gray-100 text-justify text-xl/8 pb-8">
|
||||||
|
{job.summary}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
<div className="md:w-[40vw] w-[95vw] md:min-w-3xl">
|
||||||
|
<div className="text-3xl pb-10 gap-10">Key Skills</div>
|
||||||
|
<div className="grid grid-cols-1 md:grid-cols-2">
|
||||||
|
<div>
|
||||||
|
{Object.entries(skillsLeft).map(([topic, skillsMap]) => (
|
||||||
|
<div key={topic}>
|
||||||
|
<div className="text-xl pb-5">{topic}</div>
|
||||||
|
<div className="flex items-center flex-wrap pb-5 gap-2">
|
||||||
|
{Object.entries(skillsMap).map(([language, icon]) => (
|
||||||
|
<span
|
||||||
|
key={language}
|
||||||
|
className="flex items-center bg-red-50 dark:bg-red-900 px-3 py-1 rounded-full text-gray-700 dark:text-white gap-2"
|
||||||
|
>
|
||||||
|
<Icon icon={icon} className="inline-block" /> {language}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{Object.entries(skillsRight).map(([topic, skillsMap]) => (
|
||||||
|
<div key={topic}>
|
||||||
|
<div className="text-xl pb-5">{topic}</div>
|
||||||
|
<div className="flex items-center flex-wrap pb-5 gap-2">
|
||||||
|
{Object.entries(skillsMap).map(([language, icon]) => (
|
||||||
|
<span
|
||||||
|
key={language}
|
||||||
|
className="flex items-center bg-red-50 dark:bg-red-900 px-3 py-1 rounded-full text-gray-700 dark:text-white gap-2"
|
||||||
|
>
|
||||||
|
<Icon icon={icon} className="inline-block" /> {language}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue