angkit007 commited on
Commit
d3403e1
·
1 Parent(s): b2007f3
Files changed (1) hide show
  1. app.py +49 -49
app.py CHANGED
@@ -122,22 +122,22 @@ CUSTOM_CSS = """
122
  @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
123
 
124
  :root {
125
- --violet: #8b7cf6;
126
- --coral: #fb7185;
127
- --mint: #34d399;
128
- --bg-0: #0a0b13;
129
- --card: rgba(255,255,255,0.035);
130
- --card-border: rgba(255,255,255,0.09);
131
- --text-dim: #9ba0b4;
132
- --text-faint: #676d80;
 
133
  }
134
 
135
  .gradio-container {
136
  background:
137
- radial-gradient(ellipse 900px 520px at 50% -8%, rgba(139,124,246,0.16) 0%, transparent 62%),
138
- radial-gradient(ellipse 700px 600px at 100% 20%, rgba(251,113,133,0.10) 0%, transparent 55%),
139
- radial-gradient(ellipse 700px 600px at 0% 30%, rgba(52,211,153,0.07) 0%, transparent 55%),
140
- radial-gradient(ellipse 1400px 900px at 50% 0%, #14172a 0%, var(--bg-0) 60%) !important;
141
  background-attachment: fixed !important;
142
  font-family: 'Inter', sans-serif !important;
143
  position: relative;
@@ -146,15 +146,15 @@ CUSTOM_CSS = """
146
  content: "";
147
  position: fixed; inset: 0; pointer-events: none; z-index: 0;
148
  background-image:
149
- linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px),
150
- linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px);
151
  background-size: 48px 48px;
152
  mask-image: radial-gradient(ellipse 1000px 600px at 50% 0%, black 0%, transparent 70%);
153
  }
154
  ::-webkit-scrollbar { width: 10px; height: 10px; }
155
  ::-webkit-scrollbar-track { background: var(--bg-0); }
156
- ::-webkit-scrollbar-thumb { background: #2a2d40; border-radius: 8px; }
157
- ::-webkit-scrollbar-thumb:hover { background: var(--violet); }
158
 
159
  @keyframes revealUp {
160
  from { opacity: 0; transform: translateY(22px); }
@@ -185,22 +185,21 @@ CUSTOM_CSS = """
185
  letter-spacing: -0.025em !important;
186
  line-height: 1.05 !important;
187
  margin-bottom: 6px !important;
188
- background: linear-gradient(135deg, #ffffff 0%, #cfd0f0 50%, #f3c9d2 100%);
189
  -webkit-background-clip: text;
190
  background-clip: text;
191
  -webkit-text-fill-color: transparent;
192
- filter: drop-shadow(0 2px 28px rgba(139,124,246,0.18));
193
  }
194
  #hero-headline {
195
  display: inline-block;
196
- color: #d9d3ff !important;
197
  font-family: 'Space Grotesk', sans-serif !important;
198
  font-weight: 600 !important;
199
  font-size: 18px !important;
200
  margin-top: 10px !important;
201
  padding: 6px 18px !important;
202
- background: linear-gradient(90deg, rgba(139,124,246,0.14), rgba(251,113,133,0.14));
203
- border: 1px solid rgba(139,124,246,0.35);
204
  border-radius: 999px;
205
  }
206
  .status-badge {
@@ -210,14 +209,14 @@ CUSTOM_CSS = """
210
  }
211
  .dot {
212
  width: 8px; height: 8px; border-radius: 50%;
213
- background: var(--violet);
214
- box-shadow: 0 0 12px 2px rgba(139,124,246,0.75);
215
  display: inline-block; animation: pulse 2.2s infinite;
216
  }
217
  @keyframes pulse {
218
- 0% { box-shadow: 0 0 0 0 rgba(139,124,246,.55), 0 0 12px 2px rgba(139,124,246,0.75); }
219
- 70% { box-shadow: 0 0 0 9px rgba(139,124,246,0), 0 0 12px 2px rgba(139,124,246,0.75); }
220
- 100% { box-shadow: 0 0 0 0 rgba(139,124,246,0), 0 0 12px 2px rgba(139,124,246,0.75); }
221
  }
222
  #hero-contact {
223
  display: flex !important; flex-wrap: wrap; justify-content: center; gap: 8px; align-items: center;
@@ -229,13 +228,13 @@ CUSTOM_CSS = """
229
  transition: all .18s ease;
230
  }
231
  #hero-contact a:hover {
232
- color: #0a0b13 !important;
233
- background: linear-gradient(90deg, var(--violet), var(--coral));
234
  border-color: transparent;
235
  }
236
 
237
  .section-label {
238
- font-family: 'JetBrains Mono', monospace !important; color: var(--violet) !important;
239
  letter-spacing: 0.12em !important; text-transform: uppercase; font-size: 12.5px !important;
240
  font-weight: 600 !important;
241
  }
@@ -244,8 +243,7 @@ CUSTOM_CSS = """
244
  background: var(--card) !important;
245
  border: 1px solid var(--card-border) !important;
246
  border-radius: 18px !important;
247
- backdrop-filter: blur(18px);
248
- box-shadow: 0 20px 60px -20px rgba(0,0,0,0.6), inset 0 1px 0 rgba(255,255,255,0.04) !important;
249
  padding: 22px !important;
250
  position: relative;
251
  z-index: 1;
@@ -262,14 +260,14 @@ CUSTOM_CSS = """
262
  }
263
  .gradio-container button:hover { transform: translateY(-2px); }
264
  button.primary, button[class*="primary"] {
265
- background: linear-gradient(135deg, var(--violet) 0%, var(--coral) 100%) !important;
266
  border: none !important;
267
- box-shadow: 0 8px 24px -8px rgba(139,124,246,0.55) !important;
268
- color: #0a0b13 !important;
269
  font-weight: 700 !important;
270
  }
271
  button.primary:hover, button[class*="primary"]:hover {
272
- box-shadow: 0 12px 32px -8px rgba(251,113,133,0.6) !important;
273
  }
274
 
275
  .tabs > .tab-nav {
@@ -281,6 +279,7 @@ button.primary:hover, button[class*="primary"]:hover {
281
  display: inline-flex !important;
282
  gap: 2px !important;
283
  margin-bottom: 18px;
 
284
  }
285
  .tabs > .tab-nav button {
286
  font-family: 'JetBrains Mono', monospace !important;
@@ -293,10 +292,10 @@ button.primary:hover, button[class*="primary"]:hover {
293
  margin: 0 !important;
294
  }
295
  .tabs > .tab-nav button.selected {
296
- background: linear-gradient(135deg, var(--violet) 0%, var(--coral) 100%) !important;
297
- color: #0a0b13 !important;
298
  font-weight: 700 !important;
299
- box-shadow: 0 6px 18px -6px rgba(139,124,246,0.6);
300
  }
301
 
302
  .proj-card {
@@ -304,12 +303,13 @@ button.primary:hover, button[class*="primary"]:hover {
304
  border: 1px solid var(--card-border) !important;
305
  border-radius: 14px !important;
306
  padding: 18px !important;
 
307
  transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease !important;
308
  }
309
  .proj-card:hover {
310
  transform: translateY(-4px);
311
- border-color: rgba(139,124,246,0.45) !important;
312
- box-shadow: 0 16px 40px -16px rgba(139,124,246,0.3) !important;
313
  }
314
 
315
  .gr-accordion, [class*="accordion"] {
@@ -320,7 +320,7 @@ button.primary:hover, button[class*="primary"]:hover {
320
  border-radius: 14px !important;
321
  overflow: hidden !important;
322
  border: 1px solid var(--card-border) !important;
323
- box-shadow: 0 12px 32px -18px rgba(0,0,0,0.6);
324
  }
325
  .cv-table table { font-size: 13.5px !important; }
326
  .cv-table thead th {
@@ -328,11 +328,11 @@ button.primary:hover, button[class*="primary"]:hover {
328
  text-transform: uppercase !important;
329
  font-size: 10.5px !important;
330
  letter-spacing: 0.08em !important;
331
- color: var(--mint) !important;
332
- background: rgba(52,211,153,0.06) !important;
333
  }
334
- .cv-table tbody tr:nth-child(even) { background: rgba(255,255,255,0.02) !important; }
335
- .cv-table tbody tr:hover { background: rgba(139,124,246,0.06) !important; }
336
  """
337
 
338
  with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
@@ -343,9 +343,9 @@ with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
343
  <div class="status-badge"><span class="dot"></span> resume · live · self-querying</div>
344
  <div id="hero-name">Angkit Sarma</div>
345
  <div><span id="hero-headline">AI/ML Engineer — Agentic Systems &amp; LLM Applications</span></div>
346
- <p id="hero-bio" style="color:#9ba0b4; max-width:680px; margin-top:16px; line-height:1.6;">
347
  4+ years building and shipping ML and generative AI systems — from a 50%-faster semantic
348
- search pipeline to <b style="color:#eef0f4">INFERA</b>, an agentic AI tool that won 1st place
349
  at the Flexday AI Hackathon. Ask the panel below anything about my experience — it's a live
350
  TF-IDF retrieval engine running over this résumé's own content.
351
  </p>
@@ -437,7 +437,7 @@ with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
437
  gr.Markdown("**Predictive Allocation** — ML Deployment Pipeline\n\n*Python · Azure SQL · Azure Blob · DevOps*\n\nRe-engineered end-to-end training/deployment pipeline; hardened security with Snyk and Wiz.")
438
  gr.HTML(
439
  '<p style="font-family:\'JetBrains Mono\',monospace; font-size:13px; margin-top:14px;">'
440
- '<a href="https://github.com/angkit-hash" target="_blank" style="color:#34d399; text-decoration:none; border-bottom:1px solid #34d399;">'
441
  '→ View source &amp; more projects on GitHub</a></p>'
442
  )
443
 
@@ -466,4 +466,4 @@ with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
466
  )
467
 
468
  if __name__ == "__main__":
469
- demo.launch(css=CUSTOM_CSS, theme=gr.themes.Base(primary_hue="purple", neutral_hue="slate"))
 
122
  @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
123
 
124
  :root {
125
+ --blue: #2563eb;
126
+ --blue-deep: #0ea5e9;
127
+ --cyan: #06b6d4;
128
+ --bg-0: #f7fafc;
129
+ --card: #ffffff;
130
+ --card-border: #e2e8f0;
131
+ --text-heading: #0f172a;
132
+ --text-dim: #475569;
133
+ --text-faint: #94a3b8;
134
  }
135
 
136
  .gradio-container {
137
  background:
138
+ radial-gradient(ellipse 900px 520px at 50% -8%, rgba(37,99,235,0.07) 0%, transparent 62%),
139
+ radial-gradient(ellipse 700px 600px at 100% 20%, rgba(6,182,212,0.06) 0%, transparent 55%),
140
+ radial-gradient(ellipse 1400px 900px at 50% 0%, #eef4ff 0%, var(--bg-0) 55%) !important;
 
141
  background-attachment: fixed !important;
142
  font-family: 'Inter', sans-serif !important;
143
  position: relative;
 
146
  content: "";
147
  position: fixed; inset: 0; pointer-events: none; z-index: 0;
148
  background-image:
149
+ linear-gradient(rgba(15,23,42,0.03) 1px, transparent 1px),
150
+ linear-gradient(90deg, rgba(15,23,42,0.03) 1px, transparent 1px);
151
  background-size: 48px 48px;
152
  mask-image: radial-gradient(ellipse 1000px 600px at 50% 0%, black 0%, transparent 70%);
153
  }
154
  ::-webkit-scrollbar { width: 10px; height: 10px; }
155
  ::-webkit-scrollbar-track { background: var(--bg-0); }
156
+ ::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 8px; }
157
+ ::-webkit-scrollbar-thumb:hover { background: var(--blue); }
158
 
159
  @keyframes revealUp {
160
  from { opacity: 0; transform: translateY(22px); }
 
185
  letter-spacing: -0.025em !important;
186
  line-height: 1.05 !important;
187
  margin-bottom: 6px !important;
188
+ background: linear-gradient(135deg, #0f172a 0%, #1d4ed8 60%, #06b6d4 100%);
189
  -webkit-background-clip: text;
190
  background-clip: text;
191
  -webkit-text-fill-color: transparent;
 
192
  }
193
  #hero-headline {
194
  display: inline-block;
195
+ color: #1d4ed8 !important;
196
  font-family: 'Space Grotesk', sans-serif !important;
197
  font-weight: 600 !important;
198
  font-size: 18px !important;
199
  margin-top: 10px !important;
200
  padding: 6px 18px !important;
201
+ background: linear-gradient(90deg, rgba(37,99,235,0.08), rgba(6,182,212,0.08));
202
+ border: 1px solid rgba(37,99,235,0.25);
203
  border-radius: 999px;
204
  }
205
  .status-badge {
 
209
  }
210
  .dot {
211
  width: 8px; height: 8px; border-radius: 50%;
212
+ background: var(--blue);
213
+ box-shadow: 0 0 10px 2px rgba(37,99,235,0.55);
214
  display: inline-block; animation: pulse 2.2s infinite;
215
  }
216
  @keyframes pulse {
217
+ 0% { box-shadow: 0 0 0 0 rgba(37,99,235,.45), 0 0 10px 2px rgba(37,99,235,0.55); }
218
+ 70% { box-shadow: 0 0 0 9px rgba(37,99,235,0), 0 0 10px 2px rgba(37,99,235,0.55); }
219
+ 100% { box-shadow: 0 0 0 0 rgba(37,99,235,0), 0 0 10px 2px rgba(37,99,235,0.55); }
220
  }
221
  #hero-contact {
222
  display: flex !important; flex-wrap: wrap; justify-content: center; gap: 8px; align-items: center;
 
228
  transition: all .18s ease;
229
  }
230
  #hero-contact a:hover {
231
+ color: #ffffff !important;
232
+ background: linear-gradient(90deg, var(--blue), var(--cyan));
233
  border-color: transparent;
234
  }
235
 
236
  .section-label {
237
+ font-family: 'JetBrains Mono', monospace !important; color: var(--blue) !important;
238
  letter-spacing: 0.12em !important; text-transform: uppercase; font-size: 12.5px !important;
239
  font-weight: 600 !important;
240
  }
 
243
  background: var(--card) !important;
244
  border: 1px solid var(--card-border) !important;
245
  border-radius: 18px !important;
246
+ box-shadow: 0 20px 50px -24px rgba(15,23,42,0.18), 0 4px 12px -6px rgba(15,23,42,0.06) !important;
 
247
  padding: 22px !important;
248
  position: relative;
249
  z-index: 1;
 
260
  }
261
  .gradio-container button:hover { transform: translateY(-2px); }
262
  button.primary, button[class*="primary"] {
263
+ background: linear-gradient(135deg, var(--blue) 0%, var(--cyan) 100%) !important;
264
  border: none !important;
265
+ box-shadow: 0 8px 20px -8px rgba(37,99,235,0.45) !important;
266
+ color: #ffffff !important;
267
  font-weight: 700 !important;
268
  }
269
  button.primary:hover, button[class*="primary"]:hover {
270
+ box-shadow: 0 12px 28px -8px rgba(6,182,212,0.5) !important;
271
  }
272
 
273
  .tabs > .tab-nav {
 
279
  display: inline-flex !important;
280
  gap: 2px !important;
281
  margin-bottom: 18px;
282
+ box-shadow: 0 2px 8px -4px rgba(15,23,42,0.08);
283
  }
284
  .tabs > .tab-nav button {
285
  font-family: 'JetBrains Mono', monospace !important;
 
292
  margin: 0 !important;
293
  }
294
  .tabs > .tab-nav button.selected {
295
+ background: linear-gradient(135deg, var(--blue) 0%, var(--cyan) 100%) !important;
296
+ color: #ffffff !important;
297
  font-weight: 700 !important;
298
+ box-shadow: 0 6px 16px -6px rgba(37,99,235,0.5);
299
  }
300
 
301
  .proj-card {
 
303
  border: 1px solid var(--card-border) !important;
304
  border-radius: 14px !important;
305
  padding: 18px !important;
306
+ box-shadow: 0 2px 8px -4px rgba(15,23,42,0.06);
307
  transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease !important;
308
  }
309
  .proj-card:hover {
310
  transform: translateY(-4px);
311
+ border-color: rgba(37,99,235,0.35) !important;
312
+ box-shadow: 0 16px 36px -18px rgba(37,99,235,0.28) !important;
313
  }
314
 
315
  .gr-accordion, [class*="accordion"] {
 
320
  border-radius: 14px !important;
321
  overflow: hidden !important;
322
  border: 1px solid var(--card-border) !important;
323
+ box-shadow: 0 12px 28px -20px rgba(15,23,42,0.2);
324
  }
325
  .cv-table table { font-size: 13.5px !important; }
326
  .cv-table thead th {
 
328
  text-transform: uppercase !important;
329
  font-size: 10.5px !important;
330
  letter-spacing: 0.08em !important;
331
+ color: var(--blue) !important;
332
+ background: rgba(37,99,235,0.06) !important;
333
  }
334
+ .cv-table tbody tr:nth-child(even) { background: rgba(15,23,42,0.015) !important; }
335
+ .cv-table tbody tr:hover { background: rgba(37,99,235,0.05) !important; }
336
  """
337
 
338
  with gr.Blocks(title="Angkit Sarma — Living CV") as demo:
 
343
  <div class="status-badge"><span class="dot"></span> resume · live · self-querying</div>
344
  <div id="hero-name">Angkit Sarma</div>
345
  <div><span id="hero-headline">AI/ML Engineer — Agentic Systems &amp; LLM Applications</span></div>
346
+ <p id="hero-bio" style="color:#475569; max-width:680px; margin-top:16px; line-height:1.6;">
347
  4+ years building and shipping ML and generative AI systems — from a 50%-faster semantic
348
+ search pipeline to <b style="color:#0f172a">INFERA</b>, an agentic AI tool that won 1st place
349
  at the Flexday AI Hackathon. Ask the panel below anything about my experience — it's a live
350
  TF-IDF retrieval engine running over this résumé's own content.
351
  </p>
 
437
  gr.Markdown("**Predictive Allocation** — ML Deployment Pipeline\n\n*Python · Azure SQL · Azure Blob · DevOps*\n\nRe-engineered end-to-end training/deployment pipeline; hardened security with Snyk and Wiz.")
438
  gr.HTML(
439
  '<p style="font-family:\'JetBrains Mono\',monospace; font-size:13px; margin-top:14px;">'
440
+ '<a href="https://github.com/angkit-hash" target="_blank" style="color:#0ea5e9; text-decoration:none; border-bottom:1px solid #0ea5e9;">'
441
  '→ View source &amp; more projects on GitHub</a></p>'
442
  )
443
 
 
466
  )
467
 
468
  if __name__ == "__main__":
469
+ demo.launch(css=CUSTOM_CSS, theme=gr.themes.Base(primary_hue="blue", neutral_hue="slate"))