@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.
@@ -1,6 +1,6 @@
1
1
  ---
2
- import type { ResumeData } from "../../resume-templates/typescript-schema";
3
- import { formatDateRange } from "../../resume-templates/typescript-schema";
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-white sm:p-10 lg:col-span-4">
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-white/80">{basics.headline}</p>
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-white/10"></div>
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-white/70">CONTACT</div>
76
- <div class="space-y-1 text-white/90">
77
- {contactItems.map((item) =>
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-white/70">SKILLS</div>
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-white/70">LINKS</div>
104
- <div class="space-y-1 text-sm text-white/90">
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-white/70">LANGUAGES</div>
117
- <div class="text-sm text-white/90">
118
- {languages
119
- .map((language) =>
120
- language.proficiency ? `${language.name} (${language.proficiency})` : language.name
121
- )
122
- .join(" · ")}
123
- </div>
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; // e.g., "Senior Software Developer"
8
+ headline: string;
9
9
  summary?: string;
10
10
 
11
11
  location?: {
12
12
  city?: string;
13
13
  country?: string;
14
- label?: string; // e.g., "Abu Dhabi, UAE" (preferred display)
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; // e.g., "LinkedIn", "GitHub"
24
+ label: string;
25
25
  url: string;
26
26
  }>;
27
27
  };
28
28
 
29
29
  skills?: Array<{
30
- name: string; // e.g., "TypeScript"
30
+ name: string;
31
31
  level?: "Beginner" | "Intermediate" | "Advanced" | "Expert";
32
- keywords?: string[]; // optional extra tags
32
+ keywords?: string[];
33
33
  }>;
34
34
 
35
- highlights?: string[]; // short bullets for sidebar or summary
35
+ highlights?: string[];
36
36
 
37
37
  experience?: Array<{
38
- id: string; // stable ID for reorder/edit
39
- role: string; // "Senior Software Developer"
40
- company: string; // "Global Aerospace Logistics Company"
41
- location?: string; // "UAE" or "Abu Dhabi, UAE"
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 }; // omit when present=true
43
+ end?: { year: number; month?: number };
44
44
  present?: boolean;
45
- summary?: string; // optional 1-line intro
45
+ summary?: string;
46
46
  bullets?: string[];
47
- tags?: string[]; // chips like "Architecture", "UI Systems"
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; // "B.E. / B.Tech — Computer Science"
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; // optional
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; // "English"
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"; // chips for classic/modern, levels for minimal
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 };
@@ -1975,6 +1975,11 @@
1975
1975
  color: var(--av-text);
1976
1976
  }
1977
1977
 
1978
+ .av-print-avoid-break {
1979
+ break-inside: avoid;
1980
+ page-break-inside: avoid;
1981
+ }
1982
+
1978
1983
  /* Loading bar utility */
1979
1984
  .av-loading-bar {
1980
1985
  height: 4px;
@@ -1,6 +1,11 @@
1
1
  const ROOT_DOMAIN = "ansiversa.com";
2
2
 
3
- const MINI_APP_SLUGS = new Set(["quiz"]);
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>