@ansiversa/components 0.0.119 → 0.0.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.ts +6 -3
- package/package.json +1 -2
- package/src/Summary/FlashNoteSummary.astro +69 -0
- package/src/Summary/PortfolioCreatorSummary.astro +71 -0
- package/src/Summary/ResumeBuilderSummary.astro +70 -0
- package/src/Summary/types.ts +36 -0
- package/src/resume-templates/ResumeBuilderShell.astro +1 -1
- package/src/resume-templates/ResumeTemplateClassic.astro +18 -40
- package/src/resume-templates/ResumeTemplateExecutiveTimeline.astro +22 -27
- package/src/resume-templates/ResumeTemplateMinimal.astro +2 -2
- package/src/resume-templates/ResumeTemplateModernTwoTone.astro +39 -45
- package/{resume-templates → src/resume-templates}/typescript-schema.ts +17 -19
- package/src/styles/global.css +5 -0
- package/src/utils/appUrls.ts +6 -1
- package/resume-templates/template-1.html +0 -154
- package/resume-templates/template-2.html +0 -172
- package/resume-templates/template-3.html +0 -160
- package/resume-templates/template-4.html +0 -156
- /package/{resume-templates → src/resume-templates}/resumeData.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
import type { ResumeData } from "
|
|
3
|
-
import { formatDateRange } from "
|
|
2
|
+
import type { ResumeData } from "./typescript-schema";
|
|
3
|
+
import { formatDateRange } from "./typescript-schema";
|
|
4
4
|
|
|
5
5
|
interface Props {
|
|
6
6
|
data: ResumeData;
|
|
@@ -33,6 +33,8 @@ if (basics.contact.website) {
|
|
|
33
33
|
contactItems.push({ label: formatUrlLabel(basics.contact.website), href: basics.contact.website });
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
const directContactLine = [basics.contact.email, basics.contact.phone].filter(Boolean).join(" • ");
|
|
37
|
+
|
|
36
38
|
const skills = data.skills ?? [];
|
|
37
39
|
const links = basics.links ?? [];
|
|
38
40
|
const languages = data.languages ?? [];
|
|
@@ -44,39 +46,30 @@ const declaration = data.declaration ?? {};
|
|
|
44
46
|
const hasDeclaration = Boolean(declaration.text || declaration.place || declaration.name);
|
|
45
47
|
---
|
|
46
48
|
|
|
47
|
-
<style>
|
|
48
|
-
@media print {
|
|
49
|
-
.resume-template a {
|
|
50
|
-
text-decoration: none;
|
|
51
|
-
color: inherit;
|
|
52
|
-
}
|
|
53
|
-
.resume-template {
|
|
54
|
-
background: white;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
</style>
|
|
58
|
-
|
|
59
49
|
<div class="resume-template bg-slate-100 text-slate-900 print:bg-white">
|
|
60
50
|
<main class="mx-auto max-w-4xl p-4 sm:p-6">
|
|
61
51
|
<section class="overflow-hidden rounded-2xl bg-white shadow-sm ring-1 ring-slate-200 print:shadow-none print:ring-0">
|
|
62
|
-
<div class="grid lg:grid-cols-12">
|
|
63
|
-
<aside class="bg-slate-900 p-7 text-
|
|
52
|
+
<div class="grid lg:grid-cols-12 print:grid-cols-1">
|
|
53
|
+
<aside class="bg-slate-900 p-7 text-slate-100 sm:p-10 lg:col-span-4 print:order-2 print:bg-white print:text-slate-900">
|
|
64
54
|
<div class="space-y-6">
|
|
65
55
|
<div>
|
|
66
56
|
<h1 class="text-3xl font-bold tracking-tight">{firstName}</h1>
|
|
67
57
|
{lastName && <h1 class="-mt-1 text-3xl font-bold tracking-tight">{lastName}</h1>}
|
|
68
|
-
<p class="mt-2 text-sm text-
|
|
58
|
+
<p class="mt-2 text-sm text-slate-200 print:text-slate-700">{basics.headline}</p>
|
|
69
59
|
</div>
|
|
70
60
|
|
|
71
|
-
<div class="h-px bg-
|
|
61
|
+
<div class="h-px bg-slate-700 print:bg-slate-200"></div>
|
|
72
62
|
|
|
73
63
|
{contactItems.length > 0 && (
|
|
74
|
-
<div class="space-y-2 text-sm">
|
|
75
|
-
<div class="text-
|
|
76
|
-
<div class="space-y-1 text-
|
|
77
|
-
{
|
|
64
|
+
<div class="av-print-avoid-break space-y-2 text-sm">
|
|
65
|
+
<div class="font-semibold text-slate-100 print:text-slate-900">CONTACT</div>
|
|
66
|
+
<div class="space-y-1 text-slate-200 print:text-slate-700">
|
|
67
|
+
{directContactLine && <div class="font-medium">{directContactLine}</div>}
|
|
68
|
+
{contactItems
|
|
69
|
+
.filter((item) => item.label !== basics.contact.email && item.label !== basics.contact.phone)
|
|
70
|
+
.map((item) =>
|
|
78
71
|
item.href ? (
|
|
79
|
-
<a class="underline underline-offset-2" href={item.href}>
|
|
72
|
+
<a class="underline underline-offset-2 print:no-underline" href={item.href}>
|
|
80
73
|
{item.label}
|
|
81
74
|
</a>
|
|
82
75
|
) : (
|
|
@@ -88,22 +81,22 @@ const hasDeclaration = Boolean(declaration.text || declaration.place || declarat
|
|
|
88
81
|
)}
|
|
89
82
|
|
|
90
83
|
{skills.length > 0 && (
|
|
91
|
-
<div class="space-y-3">
|
|
92
|
-
<div class="text-sm text-
|
|
84
|
+
<div class="av-print-avoid-break space-y-3">
|
|
85
|
+
<div class="text-sm font-semibold text-slate-100 print:text-slate-900">SKILLS</div>
|
|
93
86
|
<div class="flex flex-wrap gap-2">
|
|
94
87
|
{skills.map((skill) => (
|
|
95
|
-
<span class="rounded-full bg-white/10 px-3 py-1 text-xs">{skill.name}</span>
|
|
88
|
+
<span class="rounded-full bg-white/10 px-3 py-1 text-xs text-slate-100 print:border print:border-slate-200 print:bg-slate-50 print:text-slate-800">{skill.name}</span>
|
|
96
89
|
))}
|
|
97
90
|
</div>
|
|
98
91
|
</div>
|
|
99
92
|
)}
|
|
100
93
|
|
|
101
94
|
{links.length > 0 && (
|
|
102
|
-
<div class="space-y-2">
|
|
103
|
-
<div class="text-sm text-
|
|
104
|
-
<div class="space-y-1 text-sm text-
|
|
95
|
+
<div class="av-print-avoid-break space-y-2">
|
|
96
|
+
<div class="text-sm font-semibold text-slate-100 print:text-slate-900">LINKS</div>
|
|
97
|
+
<div class="space-y-1 text-sm text-slate-200 print:text-slate-700">
|
|
105
98
|
{links.map((link) => (
|
|
106
|
-
<a class="underline underline-offset-2" href={link.url}>
|
|
99
|
+
<a class="underline underline-offset-2 print:no-underline" href={link.url}>
|
|
107
100
|
{link.label ?? formatUrlLabel(link.url)}
|
|
108
101
|
</a>
|
|
109
102
|
))}
|
|
@@ -112,23 +105,24 @@ const hasDeclaration = Boolean(declaration.text || declaration.place || declarat
|
|
|
112
105
|
)}
|
|
113
106
|
|
|
114
107
|
{languages.length > 0 && (
|
|
115
|
-
<div class="space-y-2">
|
|
116
|
-
<div class="text-sm text-
|
|
117
|
-
<
|
|
118
|
-
{languages
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
108
|
+
<div class="av-print-avoid-break space-y-2">
|
|
109
|
+
<div class="text-sm font-semibold text-slate-100 print:text-slate-900">LANGUAGES</div>
|
|
110
|
+
<ul class="list-disc space-y-1 pl-5 text-sm text-slate-200 print:text-slate-700">
|
|
111
|
+
{languages.map((language) => (
|
|
112
|
+
<li>
|
|
113
|
+
{language.name}
|
|
114
|
+
{language.proficiency ? ` (${language.proficiency})` : ""}
|
|
115
|
+
</li>
|
|
116
|
+
))}
|
|
117
|
+
</ul>
|
|
124
118
|
</div>
|
|
125
119
|
)}
|
|
126
120
|
</div>
|
|
127
121
|
</aside>
|
|
128
122
|
|
|
129
|
-
<div class="p-7 sm:p-10 lg:col-span-8">
|
|
123
|
+
<div class="p-7 sm:p-10 lg:col-span-8 print:order-1">
|
|
130
124
|
{basics.summary && (
|
|
131
|
-
<section>
|
|
125
|
+
<section class="av-print-avoid-break">
|
|
132
126
|
<h2 class="text-xs font-bold tracking-widest text-slate-500">PROFILE</h2>
|
|
133
127
|
<p class="mt-3 text-sm leading-6 text-slate-700">{basics.summary}</p>
|
|
134
128
|
</section>
|
|
@@ -141,7 +135,7 @@ const hasDeclaration = Boolean(declaration.text || declaration.place || declarat
|
|
|
141
135
|
<h2 class="text-xs font-bold tracking-widest text-slate-500">EXPERIENCE</h2>
|
|
142
136
|
<div class="mt-5 space-y-6">
|
|
143
137
|
{experienceItems.map((item) => (
|
|
144
|
-
<article>
|
|
138
|
+
<article class="av-print-avoid-break">
|
|
145
139
|
<div class="flex items-start justify-between gap-4">
|
|
146
140
|
<div>
|
|
147
141
|
<h3 class="text-base font-semibold">{item.role}</h3>
|
|
@@ -176,7 +170,7 @@ const hasDeclaration = Boolean(declaration.text || declaration.place || declarat
|
|
|
176
170
|
<h2 class="text-xs font-bold tracking-widest text-slate-500">PROJECTS</h2>
|
|
177
171
|
<div class="mt-4 space-y-4">
|
|
178
172
|
{projects.map((project) => (
|
|
179
|
-
<div class="rounded-xl border border-slate-200 p-4">
|
|
173
|
+
<div class="av-print-avoid-break rounded-xl border border-slate-200 p-4">
|
|
180
174
|
<div class="flex items-baseline justify-between">
|
|
181
175
|
{project.link ? (
|
|
182
176
|
<a class="font-semibold underline underline-offset-4" href={project.link}>
|
|
@@ -211,7 +205,7 @@ const hasDeclaration = Boolean(declaration.text || declaration.place || declarat
|
|
|
211
205
|
<h2 class="text-xs font-bold tracking-widest text-slate-500">EDUCATION</h2>
|
|
212
206
|
<div class="mt-4 space-y-4">
|
|
213
207
|
{education.map((edu) => (
|
|
214
|
-
<div class="rounded-xl border border-slate-200 p-4">
|
|
208
|
+
<div class="av-print-avoid-break rounded-xl border border-slate-200 p-4">
|
|
215
209
|
<h3 class="font-semibold">{edu.degree}</h3>
|
|
216
210
|
<p class="text-sm text-slate-600">{edu.school}</p>
|
|
217
211
|
{edu.location && (
|
|
@@ -242,7 +236,7 @@ const hasDeclaration = Boolean(declaration.text || declaration.place || declarat
|
|
|
242
236
|
</section>
|
|
243
237
|
|
|
244
238
|
{hasDeclaration && (
|
|
245
|
-
<section>
|
|
239
|
+
<section class="av-print-avoid-break">
|
|
246
240
|
<div class="my-8 h-px bg-slate-200"></div>
|
|
247
241
|
<h2 class="text-xs font-bold tracking-widest text-slate-500">DECLARATION</h2>
|
|
248
242
|
{declaration.text && (
|
|
@@ -5,13 +5,13 @@ export type ResumeData = {
|
|
|
5
5
|
|
|
6
6
|
basics: {
|
|
7
7
|
fullName: string;
|
|
8
|
-
headline: string;
|
|
8
|
+
headline: string;
|
|
9
9
|
summary?: string;
|
|
10
10
|
|
|
11
11
|
location?: {
|
|
12
12
|
city?: string;
|
|
13
13
|
country?: string;
|
|
14
|
-
label?: string;
|
|
14
|
+
label?: string;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
contact: {
|
|
@@ -21,30 +21,30 @@ export type ResumeData = {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
links?: Array<{
|
|
24
|
-
label: string;
|
|
24
|
+
label: string;
|
|
25
25
|
url: string;
|
|
26
26
|
}>;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
skills?: Array<{
|
|
30
|
-
name: string;
|
|
30
|
+
name: string;
|
|
31
31
|
level?: "Beginner" | "Intermediate" | "Advanced" | "Expert";
|
|
32
|
-
keywords?: string[];
|
|
32
|
+
keywords?: string[];
|
|
33
33
|
}>;
|
|
34
34
|
|
|
35
|
-
highlights?: string[];
|
|
35
|
+
highlights?: string[];
|
|
36
36
|
|
|
37
37
|
experience?: Array<{
|
|
38
|
-
id: string;
|
|
39
|
-
role: string;
|
|
40
|
-
company: string;
|
|
41
|
-
location?: string;
|
|
38
|
+
id: string;
|
|
39
|
+
role: string;
|
|
40
|
+
company: string;
|
|
41
|
+
location?: string;
|
|
42
42
|
start: { year: number; month?: number };
|
|
43
|
-
end?: { year: number; month?: number };
|
|
43
|
+
end?: { year: number; month?: number };
|
|
44
44
|
present?: boolean;
|
|
45
|
-
summary?: string;
|
|
45
|
+
summary?: string;
|
|
46
46
|
bullets?: string[];
|
|
47
|
-
tags?: string[];
|
|
47
|
+
tags?: string[];
|
|
48
48
|
}>;
|
|
49
49
|
|
|
50
50
|
projects?: Array<{
|
|
@@ -61,12 +61,12 @@ export type ResumeData = {
|
|
|
61
61
|
|
|
62
62
|
education?: Array<{
|
|
63
63
|
id: string;
|
|
64
|
-
degree: string;
|
|
64
|
+
degree: string;
|
|
65
65
|
school: string;
|
|
66
66
|
location?: string;
|
|
67
67
|
start?: { year: number; month?: number };
|
|
68
68
|
end?: { year: number; month?: number };
|
|
69
|
-
grade?: string;
|
|
69
|
+
grade?: string;
|
|
70
70
|
bullets?: string[];
|
|
71
71
|
}>;
|
|
72
72
|
|
|
@@ -79,7 +79,7 @@ export type ResumeData = {
|
|
|
79
79
|
}>;
|
|
80
80
|
|
|
81
81
|
languages?: Array<{
|
|
82
|
-
name: string;
|
|
82
|
+
name: string;
|
|
83
83
|
proficiency?: "Native" | "Fluent" | "Professional" | "Intermediate" | "Basic";
|
|
84
84
|
}>;
|
|
85
85
|
|
|
@@ -97,14 +97,12 @@ export type ResumeData = {
|
|
|
97
97
|
name?: string;
|
|
98
98
|
};
|
|
99
99
|
|
|
100
|
-
// Template feature flags (optional)
|
|
101
100
|
settings?: {
|
|
102
|
-
showSkillsAs?: "chips" | "levels";
|
|
101
|
+
showSkillsAs?: "chips" | "levels";
|
|
103
102
|
paper?: "A4" | "Letter";
|
|
104
103
|
};
|
|
105
104
|
};
|
|
106
105
|
|
|
107
|
-
/** Helpers (optional for Codex) */
|
|
108
106
|
export function formatDateRange(item: {
|
|
109
107
|
start: { year: number; month?: number };
|
|
110
108
|
end?: { year: number; month?: number };
|
package/src/styles/global.css
CHANGED
package/src/utils/appUrls.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
const ROOT_DOMAIN = "ansiversa.com";
|
|
2
2
|
|
|
3
|
-
const MINI_APP_SLUGS = new Set([
|
|
3
|
+
const MINI_APP_SLUGS = new Set([
|
|
4
|
+
"quiz",
|
|
5
|
+
"flashnote",
|
|
6
|
+
"resume-builder",
|
|
7
|
+
"portfolio-creator",
|
|
8
|
+
]);
|
|
4
9
|
|
|
5
10
|
export const getAppBaseUrl = (appSlug: string) => {
|
|
6
11
|
if (!appSlug) {
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Resume Template 1 - Classic ATS</title>
|
|
7
|
-
<script src="https://cdn.tailwindcss.com"></script>
|
|
8
|
-
<style>
|
|
9
|
-
@media print {
|
|
10
|
-
.no-print { display: none !important; }
|
|
11
|
-
a { text-decoration: none; color: inherit; }
|
|
12
|
-
}
|
|
13
|
-
</style>
|
|
14
|
-
</head>
|
|
15
|
-
<body class="bg-slate-100 text-slate-900">
|
|
16
|
-
<div class="no-print sticky top-0 z-10 border-b border-slate-200 bg-white/90 backdrop-blur">
|
|
17
|
-
<div class="mx-auto flex max-w-4xl items-center justify-between px-4 py-3">
|
|
18
|
-
<div class="text-sm text-slate-600">Template 1 — Classic ATS</div>
|
|
19
|
-
<button class="rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-sm font-medium text-slate-700 hover:bg-slate-50" onclick="window.print()">
|
|
20
|
-
Print / Save PDF
|
|
21
|
-
</button>
|
|
22
|
-
</div>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
<main class="mx-auto max-w-4xl p-4 sm:p-6">
|
|
26
|
-
<section class="rounded-2xl bg-white p-6 shadow-sm ring-1 ring-slate-200 sm:p-10 print:shadow-none print:ring-0">
|
|
27
|
-
<header class="flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
|
|
28
|
-
<div>
|
|
29
|
-
<h1 class="text-3xl font-bold tracking-tight">Karthikeyan Ramalingam</h1>
|
|
30
|
-
<p class="mt-1 text-base font-medium text-slate-700">Senior Software Developer</p>
|
|
31
|
-
<p class="mt-3 max-w-2xl text-sm leading-6 text-slate-600">
|
|
32
|
-
Senior software developer focused on scalable systems, clean UX, and production-grade architecture.
|
|
33
|
-
</p>
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
<div class="text-sm text-slate-700 sm:text-right">
|
|
37
|
-
<div class="flex flex-col gap-1">
|
|
38
|
-
<span>Abu Dhabi, UAE</span>
|
|
39
|
-
<a class="text-slate-900 underline underline-offset-2 hover:text-slate-700" href="mailto:you@email.com">you@email.com</a>
|
|
40
|
-
<a class="text-slate-900 underline underline-offset-2 hover:text-slate-700" href="tel:+971500000000">+971 50 000 0000</a>
|
|
41
|
-
<a class="text-slate-900 underline underline-offset-2 hover:text-slate-700" href="#">ansiversa.com</a>
|
|
42
|
-
<a class="text-slate-900 underline underline-offset-2 hover:text-slate-700" href="#">linkedin.com/in/yourname</a>
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
</header>
|
|
46
|
-
|
|
47
|
-
<div class="my-8 h-px bg-slate-200"></div>
|
|
48
|
-
|
|
49
|
-
<div class="grid gap-10 lg:grid-cols-3">
|
|
50
|
-
<div class="lg:col-span-2 space-y-10">
|
|
51
|
-
<section>
|
|
52
|
-
<h2 class="text-sm font-bold tracking-widest text-slate-900">EXPERIENCE</h2>
|
|
53
|
-
<div class="mt-4 space-y-6">
|
|
54
|
-
<article>
|
|
55
|
-
<div class="flex flex-col gap-1 sm:flex-row sm:items-baseline sm:justify-between">
|
|
56
|
-
<div>
|
|
57
|
-
<h3 class="text-base font-semibold">Senior Software Developer</h3>
|
|
58
|
-
<p class="text-sm text-slate-700">Global Aerospace Logistics Company</p>
|
|
59
|
-
</div>
|
|
60
|
-
<p class="text-sm text-slate-600">2023 — Present · UAE</p>
|
|
61
|
-
</div>
|
|
62
|
-
<ul class="mt-3 list-disc space-y-2 pl-5 text-sm leading-6 text-slate-700">
|
|
63
|
-
<li>Designed and shipped internal platforms improving operational visibility and data accuracy.</li>
|
|
64
|
-
<li>Built reusable UI patterns and performance-focused server workflows.</li>
|
|
65
|
-
<li>Collaborated cross-functionally to deliver stable production releases.</li>
|
|
66
|
-
</ul>
|
|
67
|
-
</article>
|
|
68
|
-
|
|
69
|
-
<article>
|
|
70
|
-
<div class="flex flex-col gap-1 sm:flex-row sm:items-baseline sm:justify-between">
|
|
71
|
-
<div>
|
|
72
|
-
<h3 class="text-base font-semibold">Software Developer</h3>
|
|
73
|
-
<p class="text-sm text-slate-700">HCL Technologies</p>
|
|
74
|
-
</div>
|
|
75
|
-
<p class="text-sm text-slate-600">2019 — 2023 · India</p>
|
|
76
|
-
</div>
|
|
77
|
-
<ul class="mt-3 list-disc space-y-2 pl-5 text-sm leading-6 text-slate-700">
|
|
78
|
-
<li>Delivered enterprise features with strong focus on quality and maintainability.</li>
|
|
79
|
-
<li>Improved reporting workflows and data handling for business-critical modules.</li>
|
|
80
|
-
<li>Worked closely with QA and product owners to reduce defects.</li>
|
|
81
|
-
</ul>
|
|
82
|
-
</article>
|
|
83
|
-
</div>
|
|
84
|
-
</section>
|
|
85
|
-
|
|
86
|
-
<section>
|
|
87
|
-
<h2 class="text-sm font-bold tracking-widest text-slate-900">PROJECTS</h2>
|
|
88
|
-
<div class="mt-4 space-y-5">
|
|
89
|
-
<article>
|
|
90
|
-
<div class="flex items-baseline justify-between gap-3">
|
|
91
|
-
<h3 class="text-base font-semibold">Ansiversa</h3>
|
|
92
|
-
<p class="text-sm text-slate-600">2024 — Present</p>
|
|
93
|
-
</div>
|
|
94
|
-
<p class="mt-2 text-sm leading-6 text-slate-700">
|
|
95
|
-
Built a multi-app ecosystem with shared auth, strict UI standards, and a reusable component library.
|
|
96
|
-
</p>
|
|
97
|
-
<div class="mt-2 flex flex-wrap gap-2">
|
|
98
|
-
<span class="rounded-full bg-slate-100 px-3 py-1 text-xs font-medium text-slate-700">Astro</span>
|
|
99
|
-
<span class="rounded-full bg-slate-100 px-3 py-1 text-xs font-medium text-slate-700">Alpine</span>
|
|
100
|
-
<span class="rounded-full bg-slate-100 px-3 py-1 text-xs font-medium text-slate-700">Tailwind</span>
|
|
101
|
-
<span class="rounded-full bg-slate-100 px-3 py-1 text-xs font-medium text-slate-700">libSQL</span>
|
|
102
|
-
</div>
|
|
103
|
-
</article>
|
|
104
|
-
</div>
|
|
105
|
-
</section>
|
|
106
|
-
|
|
107
|
-
<section>
|
|
108
|
-
<h2 class="text-sm font-bold tracking-widest text-slate-900">EDUCATION</h2>
|
|
109
|
-
<div class="mt-4">
|
|
110
|
-
<div class="flex flex-col gap-1 sm:flex-row sm:items-baseline sm:justify-between">
|
|
111
|
-
<div>
|
|
112
|
-
<h3 class="text-base font-semibold">B.E. / B.Tech — Computer Science</h3>
|
|
113
|
-
<p class="text-sm text-slate-700">Your University Name</p>
|
|
114
|
-
</div>
|
|
115
|
-
<p class="text-sm text-slate-600">2015 — 2019</p>
|
|
116
|
-
</div>
|
|
117
|
-
</div>
|
|
118
|
-
</section>
|
|
119
|
-
</div>
|
|
120
|
-
|
|
121
|
-
<aside class="space-y-10">
|
|
122
|
-
<section>
|
|
123
|
-
<h2 class="text-sm font-bold tracking-widest text-slate-900">SKILLS</h2>
|
|
124
|
-
<div class="mt-4 flex flex-wrap gap-2">
|
|
125
|
-
<span class="rounded-lg bg-slate-100 px-3 py-1.5 text-sm text-slate-800">TypeScript</span>
|
|
126
|
-
<span class="rounded-lg bg-slate-100 px-3 py-1.5 text-sm text-slate-800">Node.js</span>
|
|
127
|
-
<span class="rounded-lg bg-slate-100 px-3 py-1.5 text-sm text-slate-800">Astro</span>
|
|
128
|
-
<span class="rounded-lg bg-slate-100 px-3 py-1.5 text-sm text-slate-800">PostgreSQL</span>
|
|
129
|
-
<span class="rounded-lg bg-slate-100 px-3 py-1.5 text-sm text-slate-800">System Design</span>
|
|
130
|
-
</div>
|
|
131
|
-
</section>
|
|
132
|
-
|
|
133
|
-
<section>
|
|
134
|
-
<h2 class="text-sm font-bold tracking-widest text-slate-900">HIGHLIGHTS</h2>
|
|
135
|
-
<ul class="mt-4 space-y-2 text-sm leading-6 text-slate-700">
|
|
136
|
-
<li>• Strong focus on clean UX and predictable components.</li>
|
|
137
|
-
<li>• Production mindset: verification, freeze, stability.</li>
|
|
138
|
-
<li>• Built reusable standards for a 100-app ecosystem.</li>
|
|
139
|
-
</ul>
|
|
140
|
-
</section>
|
|
141
|
-
|
|
142
|
-
<section>
|
|
143
|
-
<h2 class="text-sm font-bold tracking-widest text-slate-900">LANGUAGES</h2>
|
|
144
|
-
<ul class="mt-4 space-y-2 text-sm text-slate-700">
|
|
145
|
-
<li>English</li>
|
|
146
|
-
<li>Tamil</li>
|
|
147
|
-
</ul>
|
|
148
|
-
</section>
|
|
149
|
-
</aside>
|
|
150
|
-
</div>
|
|
151
|
-
</section>
|
|
152
|
-
</main>
|
|
153
|
-
</body>
|
|
154
|
-
</html>
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Resume Template 2 - Modern Two-Tone</title>
|
|
7
|
-
<script src="https://cdn.tailwindcss.com"></script>
|
|
8
|
-
<style>
|
|
9
|
-
@media print {
|
|
10
|
-
.no-print { display: none !important; }
|
|
11
|
-
a { text-decoration: none; color: inherit; }
|
|
12
|
-
body { background: white !important; }
|
|
13
|
-
}
|
|
14
|
-
</style>
|
|
15
|
-
</head>
|
|
16
|
-
<body class="bg-slate-100 text-slate-900">
|
|
17
|
-
<div class="no-print sticky top-0 z-10 border-b border-slate-200 bg-white/90 backdrop-blur">
|
|
18
|
-
<div class="mx-auto flex max-w-4xl items-center justify-between px-4 py-3">
|
|
19
|
-
<div class="text-sm text-slate-600">Template 2 — Modern Two-Tone</div>
|
|
20
|
-
<button class="rounded-lg border border-slate-200 bg-white px-3 py-1.5 text-sm font-medium text-slate-700 hover:bg-slate-50" onclick="window.print()">
|
|
21
|
-
Print / Save PDF
|
|
22
|
-
</button>
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
|
|
26
|
-
<main class="mx-auto max-w-4xl p-4 sm:p-6">
|
|
27
|
-
<section class="overflow-hidden rounded-2xl bg-white shadow-sm ring-1 ring-slate-200 print:shadow-none print:ring-0">
|
|
28
|
-
<div class="grid lg:grid-cols-12">
|
|
29
|
-
<!-- Sidebar -->
|
|
30
|
-
<aside class="lg:col-span-4 bg-slate-900 text-white p-7 sm:p-10">
|
|
31
|
-
<div class="space-y-6">
|
|
32
|
-
<div>
|
|
33
|
-
<h1 class="text-3xl font-bold tracking-tight">Karthikeyan</h1>
|
|
34
|
-
<h1 class="text-3xl font-bold tracking-tight -mt-1">Ramalingam</h1>
|
|
35
|
-
<p class="mt-2 text-sm text-white/80">Senior Software Developer</p>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
<div class="h-px bg-white/10"></div>
|
|
39
|
-
|
|
40
|
-
<div class="space-y-2 text-sm">
|
|
41
|
-
<div class="text-white/70">CONTACT</div>
|
|
42
|
-
<div class="space-y-1 text-white/90">
|
|
43
|
-
<div>Abu Dhabi, UAE</div>
|
|
44
|
-
<a class="underline underline-offset-2" href="mailto:you@email.com">you@email.com</a>
|
|
45
|
-
<a class="underline underline-offset-2" href="tel:+971500000000">+971 50 000 0000</a>
|
|
46
|
-
<a class="underline underline-offset-2" href="#">ansiversa.com</a>
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
<div class="space-y-3">
|
|
51
|
-
<div class="text-sm text-white/70">SKILLS</div>
|
|
52
|
-
<div class="flex flex-wrap gap-2">
|
|
53
|
-
<span class="rounded-full bg-white/10 px-3 py-1 text-xs">TypeScript</span>
|
|
54
|
-
<span class="rounded-full bg-white/10 px-3 py-1 text-xs">Astro</span>
|
|
55
|
-
<span class="rounded-full bg-white/10 px-3 py-1 text-xs">Alpine</span>
|
|
56
|
-
<span class="rounded-full bg-white/10 px-3 py-1 text-xs">SQL</span>
|
|
57
|
-
<span class="rounded-full bg-white/10 px-3 py-1 text-xs">Architecture</span>
|
|
58
|
-
<span class="rounded-full bg-white/10 px-3 py-1 text-xs">UI Systems</span>
|
|
59
|
-
</div>
|
|
60
|
-
</div>
|
|
61
|
-
|
|
62
|
-
<div class="space-y-2">
|
|
63
|
-
<div class="text-sm text-white/70">LINKS</div>
|
|
64
|
-
<div class="space-y-1 text-sm text-white/90">
|
|
65
|
-
<a class="underline underline-offset-2" href="#">linkedin.com/in/yourname</a>
|
|
66
|
-
<a class="underline underline-offset-2" href="#">github.com/yourname</a>
|
|
67
|
-
</div>
|
|
68
|
-
</div>
|
|
69
|
-
|
|
70
|
-
<div class="space-y-2">
|
|
71
|
-
<div class="text-sm text-white/70">LANGUAGES</div>
|
|
72
|
-
<div class="text-sm text-white/90">English · Tamil</div>
|
|
73
|
-
</div>
|
|
74
|
-
</div>
|
|
75
|
-
</aside>
|
|
76
|
-
|
|
77
|
-
<!-- Main -->
|
|
78
|
-
<div class="lg:col-span-8 p-7 sm:p-10">
|
|
79
|
-
<section>
|
|
80
|
-
<h2 class="text-xs font-bold tracking-widest text-slate-500">PROFILE</h2>
|
|
81
|
-
<p class="mt-3 text-sm leading-6 text-slate-700">
|
|
82
|
-
Senior software developer with a strong track record in enterprise systems, scalable architecture,
|
|
83
|
-
and premium UI design. Known for predictable standards, verification-first delivery, and long-term maintainability.
|
|
84
|
-
</p>
|
|
85
|
-
</section>
|
|
86
|
-
|
|
87
|
-
<div class="my-8 h-px bg-slate-200"></div>
|
|
88
|
-
|
|
89
|
-
<section>
|
|
90
|
-
<h2 class="text-xs font-bold tracking-widest text-slate-500">EXPERIENCE</h2>
|
|
91
|
-
<div class="mt-5 space-y-6">
|
|
92
|
-
<article>
|
|
93
|
-
<div class="flex items-start justify-between gap-4">
|
|
94
|
-
<div>
|
|
95
|
-
<h3 class="text-base font-semibold">Senior Software Developer</h3>
|
|
96
|
-
<p class="text-sm text-slate-600">Global Aerospace Logistics Company</p>
|
|
97
|
-
</div>
|
|
98
|
-
<span class="shrink-0 rounded-full bg-slate-100 px-3 py-1 text-xs text-slate-700">2023—Present</span>
|
|
99
|
-
</div>
|
|
100
|
-
<ul class="mt-3 list-disc space-y-2 pl-5 text-sm leading-6 text-slate-700">
|
|
101
|
-
<li>Shipped systems improving operational visibility and data accuracy.</li>
|
|
102
|
-
<li>Built reusable UI patterns and server-side workflows.</li>
|
|
103
|
-
<li>Improved performance and reliability in production releases.</li>
|
|
104
|
-
</ul>
|
|
105
|
-
</article>
|
|
106
|
-
|
|
107
|
-
<article>
|
|
108
|
-
<div class="flex items-start justify-between gap-4">
|
|
109
|
-
<div>
|
|
110
|
-
<h3 class="text-base font-semibold">Software Developer</h3>
|
|
111
|
-
<p class="text-sm text-slate-600">HCL Technologies</p>
|
|
112
|
-
</div>
|
|
113
|
-
<span class="shrink-0 rounded-full bg-slate-100 px-3 py-1 text-xs text-slate-700">2019—2023</span>
|
|
114
|
-
</div>
|
|
115
|
-
<ul class="mt-3 list-disc space-y-2 pl-5 text-sm leading-6 text-slate-700">
|
|
116
|
-
<li>Delivered enterprise features with high maintainability standards.</li>
|
|
117
|
-
<li>Improved reporting and data pipelines for business-critical modules.</li>
|
|
118
|
-
</ul>
|
|
119
|
-
</article>
|
|
120
|
-
</div>
|
|
121
|
-
</section>
|
|
122
|
-
|
|
123
|
-
<div class="my-8 h-px bg-slate-200"></div>
|
|
124
|
-
|
|
125
|
-
<section class="grid gap-8 sm:grid-cols-2">
|
|
126
|
-
<div>
|
|
127
|
-
<h2 class="text-xs font-bold tracking-widest text-slate-500">PROJECTS</h2>
|
|
128
|
-
<div class="mt-4 space-y-4">
|
|
129
|
-
<div class="rounded-xl border border-slate-200 p-4">
|
|
130
|
-
<div class="flex items-baseline justify-between">
|
|
131
|
-
<h3 class="font-semibold">Ansiversa</h3>
|
|
132
|
-
<span class="text-xs text-slate-500">2024—Present</span>
|
|
133
|
-
</div>
|
|
134
|
-
<p class="mt-2 text-sm leading-6 text-slate-700">
|
|
135
|
-
Multi-app ecosystem with shared components and strict standards.
|
|
136
|
-
</p>
|
|
137
|
-
</div>
|
|
138
|
-
|
|
139
|
-
<div class="rounded-xl border border-slate-200 p-4">
|
|
140
|
-
<div class="flex items-baseline justify-between">
|
|
141
|
-
<h3 class="font-semibold">Quiz Institute</h3>
|
|
142
|
-
<span class="text-xs text-slate-500">2024—Present</span>
|
|
143
|
-
</div>
|
|
144
|
-
<p class="mt-2 text-sm leading-6 text-slate-700">
|
|
145
|
-
Step-based quiz playthrough with metadata loading and results saving.
|
|
146
|
-
</p>
|
|
147
|
-
</div>
|
|
148
|
-
</div>
|
|
149
|
-
</div>
|
|
150
|
-
|
|
151
|
-
<div>
|
|
152
|
-
<h2 class="text-xs font-bold tracking-widest text-slate-500">EDUCATION</h2>
|
|
153
|
-
<div class="mt-4 rounded-xl border border-slate-200 p-4">
|
|
154
|
-
<h3 class="font-semibold">B.E. / B.Tech — Computer Science</h3>
|
|
155
|
-
<p class="text-sm text-slate-600">Your University Name</p>
|
|
156
|
-
<p class="mt-1 text-xs text-slate-500">2015—2019</p>
|
|
157
|
-
</div>
|
|
158
|
-
|
|
159
|
-
<h2 class="mt-8 text-xs font-bold tracking-widest text-slate-500">HIGHLIGHTS</h2>
|
|
160
|
-
<ul class="mt-4 space-y-2 text-sm leading-6 text-slate-700">
|
|
161
|
-
<li>• Verification-first delivery mindset</li>
|
|
162
|
-
<li>• Component-driven architecture</li>
|
|
163
|
-
<li>• Premium, consistent UI across apps</li>
|
|
164
|
-
</ul>
|
|
165
|
-
</div>
|
|
166
|
-
</section>
|
|
167
|
-
</div>
|
|
168
|
-
</div>
|
|
169
|
-
</section>
|
|
170
|
-
</main>
|
|
171
|
-
</body>
|
|
172
|
-
</html>
|