Minor improvements

This commit is contained in:
2025-12-26 14:18:02 +03:30
parent b818cf8226
commit b6a875b0d9
7 changed files with 5258 additions and 8125 deletions

View File

@@ -108,7 +108,7 @@ interface Props {
}
const props = withDefaults(defineProps<Props>(), {
username: 'aliarghyani'
username: 'mahdium'
})
// Detect mobile for accordion behavior (SSR-safe)

View File

@@ -3,257 +3,279 @@
* Based on RESUME-STANDARDS.md (docs/RESUME-STANDARDS.md)
* Optimized for ATS and 2025 best practices
* Version: 2.0 - 2-Page Resume (International Remote Positions)
*
*
* ⚠️ BEFORE EDITING: Give docs/RESUME-UPDATE-RULES.md to any AI agent
*
*
* Quick command for AI:
* "Read docs/RESUME-UPDATE-RULES.md and update my resume"
*/
import type { Resume } from '~/types/resume'
import type { Resume } from "~/types/resume";
export const resumeData: Resume = {
basics: {
name: 'Ali Arghyani',
label: 'Frontend Developer | Vue.js • Nuxt.js • TypeScript',
image: '/img/AliProfile.webp',
email: 'aliarghyani@gmail.com',
phone: '+98 912 322 0694',
url: 'https://aliarghyani.vercel.app',
name: "Mohammad Mahdi Mohammadi",
label: "Frontend Developer | Vue.js • Nuxt.js • TypeScript",
// image: '/img/AliProfile.webp',
email: "me@mahdium.ir",
phone: "+98 990 787 5312",
url: "https://mahdium.ir",
location: {
city: 'Tehran',
country: 'Iran',
city: "Kerman",
country: "Iran",
},
profiles: [
{
network: 'LinkedIn',
url: 'https://linkedin.com/in/aliarghyani',
icon: 'i-mdi-linkedin',
network: "Mastodon",
url: "https://mas.to/@mahdium",
icon: "i-mdi-mastodon",
},
{
network: 'GitHub',
url: 'https://github.com/aliarghyani',
icon: 'i-mdi-github',
network: "GitHub",
url: "https://github.com/mmahdium",
icon: "i-mdi-github",
},
{
network: 'Portfolio',
url: 'https://aliarghyani.vercel.app',
icon: 'i-mdi-web',
network: "Portfolio",
url: "https://mahdium.ir",
icon: "i-mdi-web",
},
],
summary:
'Frontend Developer with **3+ years** building high-performance Vue.js/Nuxt applications for international clients. **AI-first engineer** leveraging AI-powered tools & methodologies to accelerate development by up to **2x** while maintaining code quality. Specialized in performance optimization, scalable architecture (SSR, PWA, RBAC), and accessibility. Delivered **8 production applications** with focus on maintainability and distributed team collaboration. Fluent in English (**8+ years** in fully English-speaking environment at Huawei).',
"My background is primarily in backend development and system administration, where I've always enjoyed working with infrastructure, servers, and the logic that powers applications. More recently, I've begun learning Nuxt and Vue, expanding into frontend development to round out my skill set. While my main focus remains backend and system administration, I now also build user interfaces with Nuxt 4 and Vue 3, enabling me to deliver complete, endtoend solutions.",
},
work: [
{
company: 'NexaPortal',
position: 'Frontend Developer (Remote)',
location: 'Izmir, Turkey',
startDate: '2024-12',
company: "Group7Sky",
position: "System Administrator & DevOps manager",
location: "Kerman, Iran",
startDate: "2024-6",
highlights: [
'Developed **5 interconnected applications** for two medical tourism platforms (**Elara Medical** & **Artemis Clinics**): admin panels, patient dashboards, and website with **10+ language** support and PWA capabilities',
'Built custom **PDF template editor** with drag-and-drop interface, dynamic variable injection, and multi-page support, enabling non-technical staff to create patient documents without developer intervention',
'Engineered enterprise-grade **RBAC system** with deep permission patterns supporting field-level granularity and wildcard permissions across **40+ domain models**',
'Developed **dynamic form builder** with **10+ field types** and drag-and-drop arrangement, reducing new form development time by **60%** through schema-based architecture',
'Implemented real-time messaging via **Pusher WebSockets** supporting WhatsApp and in-app channels, plus custom **Canvas animations** with physics simulation for premium UX',
'Optimized performance through code splitting, lazy loading, and Pinia state management; accelerated development by **2x** using AI-powered tools with **zero critical bugs**',
],
},
{
company: 'Freelance',
position: 'Frontend Developer (Remote)',
location: 'Tehran, Iran',
startDate: '2023-09',
endDate: '2024-12',
highlights: [
'Delivered **3 production-grade** web applications for international clients using Vue.js/Nuxt.js, consistently achieving strong performance metrics and high client satisfaction',
'Leveraged AI development tools to reduce development time by **40%** across all projects, enabling faster client delivery and **100% on-time** project completion rate',
'**Ideh** - Idea evaluation platform with reusable component library reducing development time by **30%** and scalable Vue.js architecture',
'**Insho** - Advertising marketplace with advanced dynamic form handling (schema-based architecture), modern backend-frontend structure reducing integration time by 40%, and responsive UI for creator-brand matching',
'**BaMashin** - Mobility rental platform with payment integration and responsive UI optimized for mobile/desktop',
'Led client communications, translated business requirements into technical specifications, delivered iteratively with clear documentation and transparent progress updates',
],
},
{
company: 'Huawei Technologies',
position: 'Senior Performance Team Lead',
location: 'Tehran, Iran',
startDate: '2022-04',
endDate: '2023-08',
highlights: [
'Led team managing performance and availability for **14,500+ network sites** nationwide, ensuring **99.5%+ uptime** and rapid incident response across distributed infrastructure',
'Automated Excel reporting workflows using **Python** and **Pandas**, reducing manual report generation time by **70%** and enabling real-time performance insights across **14,500+ sites**',
'Established operational standards and best practices; mentored **10 team members** improving team efficiency by **30%** through process optimization and knowledge sharing',
'Conducted comprehensive data analysis and KPI monitoring using advanced analytics; identified performance trends and improvement opportunities, reducing network downtime by **22%** year-over-year',
'Owned stakeholder communication interface; delivered weekly performance reports and monthly strategic updates to **C-level executives**, translating technical metrics into business impact',
'Built strong operational discipline (documentation, monitoring, incident management, quality gates) that directly enhances frontend engineering quality and architectural decision-making',
],
},
{
company: 'Huawei Technologies',
position: 'Technical & Leadership Roles',
location: 'Tehran, Iran',
startDate: '2016-06',
endDate: '2022-04',
highlights: [
'**Senior Performance Analyst** (2018-2022): Drove network KPI analysis across 2G/3G/LTE; contributed to audits, process improvements and performance dashboards',
'**Assistant Regional Manager** (2018): Managed **~3,000** BTS sites across Tehran Province; coordinated subcontractors and translated technical specs into implementation plans',
'**TCHA Team Lead** (2017-2018): Built availability dashboards and drove stakeholder alignment; recognized as **outstanding fresh graduate** at Huawei annual meeting',
'**Back Office Operations** (2016-2017): Supported OSS operations, performance checks and reporting; contributed to team efficiency and customer satisfaction',
"Managed and maintained Linux-based servers, ensuring stable deployment environments, uptime monitoring, and routine performance optimization for production systems",
"Implemented CI/CD workflows and automated deployment pipelines using GitHub Actions and Docker, reducing manual deployment overhead and improving reliability",
"Configured and secured web services, reverse proxies, and SSL certificates, improving system stability and user trust across multiple client-facing applications",
"Developed internal tools and utilities in Go, .NET, and TypeScript to streamline workflows and automate repetitive operational tasks",
"Collaborated with development teams to diagnose infrastructure issues, optimize resource usage, and improve overall system performance",
"Provided technical support for OSS operations, including repository management, version control workflows, and issue triaging",
],
},
],
education: [
{
institution: 'Qom University of Technology',
area: 'Telecommunications Engineering',
studyType: 'Bachelor of Science',
startDate: '2010-09',
endDate: '2015-06',
institution: "Farhangian University of Kerman",
area: "English Language Teaching",
studyType: "Bachelors Degree",
startDate: "2025",
endDate: "ongoing",
courses: [
'Software Architecture',
'Systems Design',
'Network Management',
'Digital Signal Processing',
"Academic Writing & Communication",
"Educational Technology",
"Linguistics & Language Structure",
"Research Methodology",
],
},
],
skills: [
{
name: 'Frontend Core',
name: "Frontend Core",
keywords: [
'Vue.js',
'Nuxt.js',
'TypeScript',
'JavaScript (ES6+)',
'HTML5',
'CSS3',
'Pinia',
'Vuetify',
'Tailwind CSS',
"Vue.js",
"Nuxt.js",
"TypeScript",
"JavaScript (ES6+)",
"Tailwind CSS",
"Pinia",
"DaisyUI",
"Axios",
"vue-i18n",
],
},
{
name: 'AI-Assisted Development',
name: "Backend & Systems",
keywords: [
'Cursor AI',
'GitHub Copilot',
'Codex',
'BMad Method',
'Claude/ChatGPT',
'Prompt Engineering',
'AI-Powered Code Review',
"Go",
"Gin",
".NET",
"PostgreSQL",
"MariaDB",
"Supabase",
"REST APIs",
"WebSocket",
],
},
{
name: 'Architecture & Performance',
name: "DevOps & Infrastructure",
keywords: [
'SSR (Server-Side Rendering)',
'SSG (Static Site Generation)',
'PWA (Progressive Web Apps)',
'RBAC Systems',
'Code Splitting & Lazy Loading',
'Performance Optimization',
"Docker",
"GitHub Actions (CI/CD)",
"Linux",
"Ubuntu",
"Nginx",
"Cloudflare",
"Vercel",
"Appwrite",
],
},
{
name: 'Development Tools & Workflow',
name: "AIAssisted Development",
keywords: [
'Git/GitHub',
'GitHub Actions (CI/CD)',
'ESLint/Prettier',
'Vite',
'VueUse',
'REST APIs',
'WebSocket',
'Agile/Scrum',
"Cursor",
"GitHub Copilot",
"Prompt Engineering",
"AIPowered Code Review",
],
},
{
name: 'Quality & Accessibility',
name: "Architecture & Performance",
keywords: [
'WCAG 2.1 Compliance',
'Lighthouse Optimization',
'Cypress E2E Testing',
'Code Review',
'i18n Internationalization',
'Responsive Design',
"SSR (ServerSide Rendering)",
"SSG (Static Site Generation)",
"Code Splitting & Lazy Loading",
"Caching Strategies",
"Performance Optimization",
],
},
{
name: "Development Tools & Workflow",
keywords: [
"Git",
"GitHub",
"GitLab",
"pnpm",
"Swagger",
"ESLint/Prettier",
"Vite",
"VueUse",
"Agile/Scrum",
],
},
{
name: "Quality & UI/UX",
keywords: [
"Responsive Design",
"Accessibility Awareness",
"Lighthouse Optimization",
"Code Review",
"i18n Internationalization",
],
},
{
name: "Used Before",
keywords: [
"Python",
"C",
"C++",
"SQLite",
"MongoDB",
"Flask",
"Material UI",
"Arduino",
"Iconify",
],
},
],
languages: [
{
language: 'Persian',
fluency: 'Native',
language: "Persian",
fluency: "Native",
},
{
language: 'English',
fluency: 'Fluent',
language: "English",
fluency: "Fluent",
},
],
certificates: [
{
name: 'Advanced English Proficiency',
date: '2025',
issuer: 'Duolingo English Test',
url: '',
summary: 'Score: 85/100 (Advanced Level)',
},
],
// certificates: [
// {
// name: "Advanced English Proficiency",
// date: "2025",
// issuer: "Duolingo English Test",
// url: "",
// summary: "Score: 85/100 (Advanced Level)",
// },
// ],
projects: [
{
name: 'Ideh',
name: "TBW (To Be Watched)",
description:
'Idea evaluation & market insights platform with scalable architecture and reusable component library',
"A clean and minimal media tracking app for managing movies and series, built with Vue 3 and Tailwind CSS.",
highlights: [
'Component library reduced development time by 30%',
'Scalable Vue.js architecture',
'Dynamic form generation system',
"Designed a lightweight and responsive UI using Tailwind CSS and DaisyUI",
"Implemented local storagebased state management for fast, offline-friendly usage",
"Integrated Axios for efficient API communication and modular data handling",
],
keywords: ['Vue.js', 'Nuxt.js', 'Component Library'],
startDate: '2023-09',
endDate: '2024-12',
url: 'https://ideh.app',
roles: ['Frontend Developer'],
type: 'application',
keywords: ["Vue.js", "TypeScript", "Tailwind CSS", "DaisyUI", "Axios"],
startDate: "2024-01",
endDate: "2024-03",
url: "https://tbw.monasef.ir/",
roles: ["Frontend Developer"],
type: "application",
},
{
name: 'Insho',
name: "TorrentMax",
description:
'Media & advertising marketplace connecting agencies and creators for campaign collaboration',
"A utility tool that enriches magnet links with additional trackers for improved torrent performance.",
highlights: [
'Advanced dynamic form handling with schema-based architecture enabling complex multi-functional forms with validation, conditional logic, and real-time updates',
'Established modern structure between backend and frontend for seamless form data flow, reducing integration time by 40%',
'Responsive UI optimized for creator-brand matching with comprehensive listing and proposal management system',
"Built a fast Nuxt-based interface with instant magnet parsing",
"Implemented tracker injection logic with clean, modular TypeScript",
"Deployed globally on Vercel with optimized caching and edge performance",
],
keywords: ['Vue.js', 'Nuxt.js', 'Dynamic Forms', 'Schema-based Architecture', 'Marketplace'],
startDate: '2023-09',
endDate: '2024-12',
url: 'https://insho.app',
roles: ['Frontend Developer'],
type: 'application',
keywords: ["Nuxt.js", "Vue.js", "TypeScript", "Tailwind CSS"],
startDate: "2024-02",
endDate: "2024-02",
url: "https://torrentmax.monasef.ir/",
roles: ["Fullstack Developer"],
type: "tool",
},
{
name: 'BaMashin',
name: "HoolIt",
description:
'Mobility rental platform (cars, boats, helicopters) with comprehensive booking system and accessible UI',
"An open-source alternative to dweet.io, enabling users to publish small code snippets and microexperiments.",
highlights: [
'Multi-category rental system',
'WCAG 2.1 compliant interface',
'Payment integration',
"Developed backend using Go and Gin with clean routing and modular structure",
"Containerized the application with Docker for consistent deployment",
"Implemented secure API endpoints and efficient request handling",
],
keywords: ['Vue.js', 'TypeScript', 'Responsive Design', 'Accessibility'],
startDate: '2023-09',
endDate: '2024-12',
url: 'https://bamashin.net',
roles: ['Frontend Developer'],
type: 'application',
keywords: ["Go", "Gin", "Docker", "REST API"],
startDate: "2024-04",
endDate: "2024-06",
url: "https://github.com/mmahdium/HoolIt",
roles: ["Backend Developer"],
type: "application",
},
{
name: "PolyList",
description:
"A social music platform for creating, sharing, and tracking playlists with real-time listening history.",
highlights: [
"Built a scalable backend using Go, Gin, and PostgreSQL",
"Implemented Supabase authentication and real-time features",
"Developed a modern Nuxt 3 frontend with responsive UI and dynamic routing",
"Deployed on Vercel with optimized build and caching strategies",
],
keywords: [
"Go",
"Gin",
"PostgreSQL",
"Supabase",
"Nuxt.js",
"Vue.js",
"Tailwind CSS",
"Docker",
],
startDate: "2024-06",
endDate: "ongoing",
url: "https://pl.mahdium.ir",
roles: ["Fullstack Developer"],
type: "application",
},
],
}
};

View File

@@ -9,7 +9,7 @@
<AIStack />
<SoftSkills />
<LanguageSkills />
<GitHubActivity username="aliarghyani" />
<GitHubActivity username="mmahdium" />
<WorkExperience />
<EducationList />
<RecommendationsCarousel />

View File

@@ -8,7 +8,7 @@ const route = useRoute()
const isPrintMode = computed(() => route.query.print === 'true')
useHead({
title: 'Resume - Ali Arghyani',
title: 'Resume - Mohammad Mahdi Mohammadi',
meta: [
{ name: 'robots', content: 'noindex' }
]

View File

@@ -88,8 +88,8 @@ export default defineNuxtConfig({
runtimeConfig: {
public: {
loadPlausible: "", // overrided by env,
siteName: "AliArghyani",
siteUrl: "https://aliarghyani.vercel.app", // Used for sitemap and RSS generation
siteName: "Mohammad Mahdi Mohammadi",
siteUrl: "https://mahdium.ir", // Used for sitemap and RSS generation
githubToken: "", // GitHub API token - set via NUXT_PUBLIC_GITHUB_TOKEN env variable
},
},

12903
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,63 +1,65 @@
import puppeteer from 'puppeteer'
import type { Browser } from 'puppeteer'
import puppeteer from "puppeteer";
import type { Browser } from "puppeteer";
export default defineEventHandler(async (event) => {
let browser: Browser | null = null
let browser: Browser | null = null;
try {
const requestUrl = getRequestURL(event)
const host = requestUrl.host.includes('192.168') || requestUrl.host.includes('localhost')
? 'localhost:5000'
: requestUrl.host
const baseUrl = `http://${host}`
const resumeUrl = `${baseUrl}/resume?print=true`
const requestUrl = getRequestURL(event);
const host =
requestUrl.host.includes("192.168") ||
requestUrl.host.includes("localhost")
? "localhost:5000"
: requestUrl.host;
const baseUrl = `http://${host}`;
const resumeUrl = `${baseUrl}/resume?print=true`;
console.log('[PDF API] Generating from:', resumeUrl)
console.log("[PDF API] Generating from:", resumeUrl);
const isDev = process.env.NODE_ENV === 'development'
const isDev = process.env.NODE_ENV === "development";
if (isDev) {
browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox'],
})
args: ["--no-sandbox", "--disable-setuid-sandbox"],
});
} else {
const chromium = await import('@sparticuz/chromium')
const puppeteerCore = await import('puppeteer-core')
const chromium = await import("@sparticuz/chromium");
const puppeteerCore = await import("puppeteer-core");
browser = await puppeteerCore.default.launch({
args: chromium.default.args,
executablePath: await chromium.default.executablePath(),
headless: true,
})
});
}
const page = await browser.newPage()
const page = await browser.newPage();
// Set viewport to A4 dimensions (210mm x 297mm at 96 DPI)
await page.setViewport({
width: 794, // 210mm
height: 1123 // 297mm
})
await page.setViewport({
width: 794, // 210mm
height: 1123, // 297mm
});
// Enable print media type BEFORE loading page
await page.emulateMediaType('print')
await page.emulateMediaType("print");
const response = await page.goto(resumeUrl, {
waitUntil: 'networkidle0',
waitUntil: "networkidle0",
timeout: 30000,
})
});
if (!response || !response.ok()) {
throw new Error(`Failed to load: ${response?.status()}`)
throw new Error(`Failed to load: ${response?.status()}`);
}
// Wait for Vue hydration and v-html rendering to complete
await page.waitForSelector('strong', { timeout: 5000 }).catch(() => {
console.log('[PDF API] No strong tags found, continuing anyway')
})
await page.waitForSelector("strong", { timeout: 5000 }).catch(() => {
console.log("[PDF API] No strong tags found, continuing anyway");
});
// Additional wait to ensure all dynamic content is rendered
await new Promise(resolve => setTimeout(resolve, 1000))
await new Promise((resolve) => setTimeout(resolve, 1000));
// Inject critical CSS fixes for PDF generation - balanced spacing like web version
await page.addStyleTag({
@@ -150,39 +152,41 @@ export default defineEventHandler(async (event) => {
line-height: 1.82 !important;
}
`,
})
});
const pdf = await page.pdf({
format: 'A4',
format: "A4",
printBackground: true,
margin: { top: 0, right: 0, bottom: 0, left: 0 },
preferCSSPageSize: true,
})
});
const query = getQuery(event)
const now = new Date()
const year = now.getFullYear()
const monthName = now.toLocaleString('en-US', { month: 'long' })
const filename = (query.filename as string) || `Ali_Arghyani_Resume_${monthName.replace(/\s+/g, '')}_${year}.pdf`
const download = query.download === 'true'
const query = getQuery(event);
const now = new Date();
const year = now.getFullYear();
const monthName = now.toLocaleString("en-US", { month: "long" });
const filename =
(query.filename as string) ||
`Mohammad_Mahdi_Mohammadi_Resume_${monthName.replace(/\s+/g, "")}_${year}.pdf`;
const download = query.download === "true";
setResponseHeaders(event, {
'Content-Type': 'application/pdf',
"Content-Type": "application/pdf",
// inline = show in browser, attachment = force download
'Content-Disposition': `${download ? 'attachment' : 'inline'}; filename="${filename}"`,
})
"Content-Disposition": `${download ? "attachment" : "inline"}; filename="${filename}"`,
});
return pdf
return pdf;
} catch (error) {
console.error('PDF generation failed:', error)
setResponseStatus(event, 500)
console.error("PDF generation failed:", error);
setResponseStatus(event, 500);
return {
error: 'PDF generation failed',
message: error instanceof Error ? error.message : 'Unknown error',
}
error: "PDF generation failed",
message: error instanceof Error ? error.message : "Unknown error",
};
} finally {
if (browser) {
await browser.close()
await browser.close();
}
}
})
});