Skip to content

Commit 1c422a4

Browse files
committed
latex resume
1 parent c25c88b commit 1c422a4

4 files changed

Lines changed: 329 additions & 13 deletions

File tree

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
name: Build resume PDF and deploy portfolio
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
pages: write
12+
id-token: write
13+
14+
concurrency:
15+
group: pages
16+
cancel-in-progress: false
17+
18+
jobs:
19+
build:
20+
runs-on: ubuntu-latest
21+
22+
steps:
23+
- name: Check out repository
24+
uses: actions/checkout@v6
25+
26+
- name: Compile ATS resume
27+
uses: xu-cheng/latex-action@v4
28+
with:
29+
root_file: Tharuka-Chathura-Resume.tex
30+
working_directory: resume-source
31+
32+
- name: Assemble GitHub Pages site
33+
shell: bash
34+
run: |
35+
mkdir -p _site
36+
rsync -a \
37+
--exclude '.git/' \
38+
--exclude '.github/' \
39+
--exclude '_site/' \
40+
--exclude 'resume-source/' \
41+
./ _site/
42+
mkdir -p _site/assets
43+
cp resume-source/Tharuka-Chathura-Resume.pdf \
44+
_site/assets/Tharuka-Chathura-Resume.pdf
45+
touch _site/.nojekyll
46+
47+
- name: Configure GitHub Pages
48+
uses: actions/configure-pages@v5
49+
50+
- name: Upload Pages artifact
51+
uses: actions/upload-pages-artifact@v4
52+
with:
53+
path: _site
54+
55+
deploy:
56+
needs: build
57+
runs-on: ubuntu-latest
58+
environment:
59+
name: github-pages
60+
url: ${{ steps.deployment.outputs.page_url }}
61+
62+
steps:
63+
- name: Deploy to GitHub Pages
64+
id: deployment
65+
uses: actions/deploy-pages@v4
Lines changed: 248 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
1+
%-------------------------
2+
% ATS-Friendly Professional Resume in LaTeX
3+
%-------------------------
4+
5+
\documentclass[letterpaper,11pt]{article}
6+
7+
\usepackage[empty]{fullpage}
8+
\usepackage{titlesec}
9+
\usepackage{enumitem}
10+
\usepackage[hidelinks]{hyperref}
11+
\usepackage[english]{babel}
12+
\usepackage[usenames,dvipsnames]{color}
13+
\usepackage[T1]{fontenc}
14+
\usepackage{tgheros}
15+
\usepackage{microtype}
16+
17+
\renewcommand*\familydefault{\sfdefault}
18+
19+
% Improve text extraction from the generated PDF.
20+
\input{glyphtounicode}
21+
\pdfgentounicode=1
22+
23+
% Colors
24+
\definecolor{heading-grey}{gray}{0.15}
25+
\definecolor{text-grey}{gray}{0.08}
26+
\definecolor{muted-grey}{gray}{0.35}
27+
\definecolor{line-grey}{gray}{0.78}
28+
29+
\color{text-grey}
30+
31+
% PDF metadata
32+
\hypersetup{
33+
pdftitle={Tharuka Chathura Resume},
34+
pdfauthor={Tharuka Chathura},
35+
pdfsubject={Mobile and AI Engineer}
36+
}
37+
38+
% Page style
39+
\pagestyle{empty}
40+
41+
% Margins
42+
\addtolength{\oddsidemargin}{-0.55in}
43+
\addtolength{\evensidemargin}{-0.55in}
44+
\addtolength{\textwidth}{1.1in}
45+
\addtolength{\topmargin}{-0.65in}
46+
\addtolength{\textheight}{1.25in}
47+
48+
\urlstyle{same}
49+
\raggedbottom
50+
\raggedright
51+
52+
% Section formatting
53+
\titleformat{\section}{
54+
\vspace{4pt}\bfseries\large\color{heading-grey}
55+
}{}{0em}{}[\color{line-grey}\titlerule \vspace{-5pt}]
56+
57+
% Custom commands
58+
\newcommand{\resumeItem}[1]{
59+
\item\small{#1}
60+
}
61+
62+
% Plain-text heading structure avoids tables and improves ATS reading order.
63+
\newcommand{\resumeSubheading}[4]{
64+
\vspace{1pt}\item
65+
\textbf{#1} \hfill {\small\color{muted-grey} #2} \\
66+
\textit{\small #3} \hfill {\small\color{muted-grey} #4}
67+
\vspace{-5pt}
68+
}
69+
70+
\newcommand{\resumeProjectHeading}[2]{
71+
\vspace{1pt}\item
72+
\textbf{#1} \hfill {\small\color{muted-grey} #2}
73+
\vspace{-5pt}
74+
}
75+
76+
\newcommand{\resumeSubHeadingListStart}{
77+
\begin{itemize}[leftmargin=0in, label={}, itemsep=6pt]
78+
}
79+
80+
\newcommand{\resumeSubHeadingListEnd}{
81+
\end{itemize}
82+
}
83+
84+
\newcommand{\resumeItemListStart}{
85+
\begin{itemize}[leftmargin=0.18in, itemsep=2pt, topsep=4pt]
86+
}
87+
88+
\newcommand{\resumeItemListEnd}{
89+
\end{itemize}\vspace{-2pt}
90+
}
91+
92+
%-------------------------------------------
93+
%%%%%% RESUME STARTS HERE %%%%%%%%%%%%%%%%%
94+
%-------------------------------------------
95+
96+
\begin{document}
97+
98+
%----------HEADING----------
99+
\begin{center}
100+
{\Huge \textbf{THARUKA CHATHURA}} \\ \vspace{4pt}
101+
{\large \textbf{MOBILE \& AI ENGINEER}} \\ \vspace{6pt}
102+
103+
\small
104+
\href{tel:+61459914630}{+61 459 914 630}
105+
\hspace{5pt} $|$ \hspace{5pt}
106+
\href{mailto:tharukack@gmail.com}{tharukack@gmail.com}
107+
\hspace{5pt} $|$ \hspace{5pt}
108+
\href{https://www.linkedin.com/in/tharuka-chathura/}{linkedin.com/in/tharuka-chathura}
109+
\\ \vspace{3pt}
110+
Blacktown, NSW 2148
111+
\hspace{5pt} $|$ \hspace{5pt}
112+
\href{https://tharukack.github.io/}{tharukack.github.io}
113+
\hspace{5pt} $|$ \hspace{5pt}
114+
Full Australian Work Rights (Subclass 500 Dependent)
115+
\end{center}
116+
117+
\vspace{-8pt}
118+
119+
%-----------SUMMARY-----------
120+
\section{SUMMARY}
121+
\small{
122+
Mobile and AI Engineer with 5+ years of software development experience, specializing in Android, Kotlin Multiplatform (KMP), iOS interoperability, and AI-powered healthcare systems. Experienced in building production mobile applications, BLE and offline-first architectures, real-time voice assistants, retrieval-augmented generation (RAG) pipelines, and on-device machine learning. Brings complementary full-stack experience across scalable backend services, cloud infrastructure, databases, and web applications, with a record of delivering reliable systems for thousands of users and devices.
123+
}
124+
125+
\vspace{-6pt}
126+
127+
%-----------SKILLS-----------
128+
\section{TECHNICAL SKILLS}
129+
\begin{itemize}[leftmargin=0in, label={}, itemsep=2pt]
130+
\small{\item{
131+
\textbf{Mobile \& Architecture:} Kotlin Multiplatform (KMP), Android SDK, Jetpack Compose, SwiftUI, Clean Architecture, MVVM, Koin, Dagger Hilt, Room, WorkManager, BLE, Coroutines, Flow, Offline-First Systems \\
132+
\textbf{AI \& Machine Learning:} RAG, FAISS, Vector Databases, Local LLMs, AI Agents, OpenAI APIs, Hugging Face Transformers, Model Fine-Tuning, ONNX, Quantization, BERT, Embedding, Wake word, ASR, STT, TTS \\
133+
\textbf{Backend \& Cloud:} NestJS, Spring Boot, PostgreSQL, Redis, Docker Compose, AWS, Firebase, Hibernate, REST APIs, WebSockets, JWT, Prisma ORM \\
134+
\textbf{Web \& Full-Stack:} React, Next.js, Angular, RxJS, TypeScript, JavaScript \\
135+
\textbf{Languages:} Kotlin, Swift, Java, Python, TypeScript, JavaScript, SQL, C++, Dart \\
136+
\textbf{Testing \& Delivery:} Git, CI/CD, JUnit, TestNG, Cucumber BDD, Appium, Espresso, Selenium, Firebase Crashlytics, Android MDM/EMM
137+
}}
138+
\end{itemize}
139+
140+
\vspace{-8pt}
141+
142+
%-----------PROFESSIONAL EXPERIENCE-----------
143+
\section{PROFESSIONAL EXPERIENCE}
144+
\resumeSubHeadingListStart
145+
146+
\resumeSubheading
147+
{HeartBug}{Mar. 2025 -- Present}
148+
{Full-Stack Engineer}{NSW, Australia}
149+
\resumeItemListStart
150+
\resumeItem{Built cross-platform Android and iOS healthcare applications using Kotlin Multiplatform, Jetpack Compose, SwiftUI interoperability, Clean Architecture, MVVM, and Koin, supporting \textbf{3,000+ existing patients}.}
151+
\resumeItem{Developed the Bugsy AI voice-assistant mobile client with real-time audio streaming, wake word detection, echo cancellation, TTS, and optimized streaming pipelines to improve accuracy and reduce latency during live conversations.}
152+
\resumeItem{Designed and implemented the Bugsy backend using Docker Compose, PostgreSQL, Redis, FAISS-based RAG pipelines, ASR models, OpenAI APIs, and WebSockets, delivering low-latency conversational AI workflows tested to support \textbf{10,000+ patients}.}
153+
\resumeItem{Architected BLE communication and offline-first synchronization using Kotlin Coroutines, StateFlows, foreground services, local caching, and persistent storage, reducing reconnection failures by \textbf{90\%} and improving synchronization reliability by \textbf{80\%} in internal testing and staging.}
154+
\resumeItem{Fine-tuned MobileBERT and DeBERTa models with Hugging Face Transformers for lightweight intent classification, achieving over \textbf{90\% recognition accuracy}, and implemented local LLM action handling and prompt-engineering workflows.}
155+
\resumeItem{Maintained production applications serving \textbf{3,000+ active users} by analysing Firebase Crashlytics data and resolving production defects, reducing the proportion of users experiencing crashes from \textbf{20\% to 1\%}.}
156+
\resumeItemListEnd
157+
158+
\resumeSubheading
159+
{Qmatic}{Jul. 2022 -- Dec. 2024}
160+
{Software Engineer}{Sweden}
161+
\resumeItemListStart
162+
\resumeItem{Designed and delivered \textbf{90\% of the Android UI and legacy XML-to-Jetpack Compose migration}, applying Clean Architecture, SOLID principles, MVVM, multi-module design, reactive programming, and Dagger Hilt.}
163+
\resumeItem{Implemented automated error detection and recovery for connection, server, and printer failures, reducing system downtime by \textbf{90\%} and configurator workload by \textbf{70\%}.}
164+
\resumeItem{Implemented QR-code device provisioning and transitioned from a Spring Boot service using the Android Management API to a standalone MDM solution, enabling kiosk mode across \textbf{10,000+ Android devices}.}
165+
\resumeItem{Engineered an automated test framework using Kotlin, Cucumber BDD, JUnit, TestNG, and Appium, reducing manual QA workload by \textbf{80\%}.}
166+
\resumeItem{Integrated printers, assist buttons, and card readers and enabled contact, contactless, and magnetic-stripe card processing for ticket generation.}
167+
\resumeItem{Automated CI/CD workflows with deployment scripts that built, packaged, and deployed artifacts to AWS, improving release consistency and delivery efficiency.}
168+
\resumeItem{Delivered Angular features for staff applications using RxJS, dependency injection, routing, reactive forms, pipes, and subscription management.}
169+
\resumeItemListEnd
170+
171+
\resumeSubheading
172+
{Fiverr (Part-time)}{Feb. 2020 -- Jan. 2022}
173+
{Freelance Software Developer}{Remote}
174+
\resumeItemListStart
175+
\resumeItem{Delivered \textbf{100+ custom software solutions} for over 100 global clients using Java, C++, Python, and JavaScript.}
176+
\resumeItem{Created \textbf{20+ IoT systems and electronic prototypes} using Arduino, ESP32, NodeMCU, and STM32 microcontrollers.}
177+
\resumeItem{Developed \textbf{30+ web automation scripts and crawlers} using Python, Java, and Selenium, reducing client data-extraction effort by over \textbf{80\%}.}
178+
\resumeItemListEnd
179+
180+
\resumeSubheading
181+
{Bloomwire}{Feb. 2020 -- Jul. 2020}
182+
{Backend Developer}{Sri Lanka}
183+
\resumeItemListStart
184+
\resumeItem{Built backend services for the Unecast SMS platform using Spring Boot, REST APIs, Amazon EC2, Lambda, RDS, JWT, SQL, Hibernate, and transaction management.}
185+
\resumeItemListEnd
186+
187+
\resumeSubHeadingListEnd
188+
189+
%-----------PROJECTS-----------
190+
\section{PROJECTS}
191+
\resumeSubHeadingListStart
192+
193+
\resumeProjectHeading
194+
{Sadaham Sewana Charity Order Management Platform}{Full-Stack Project}
195+
\resumeItemListStart
196+
\resumeItem{Built an order and campaign management platform for coordinating customer orders and charity lunch-packet distributions using NestJS, Prisma ORM, PostgreSQL, and Next.js.}
197+
\resumeItem{Implemented JWT authentication, Twilio SMS notifications, rate limiting, automated PostgreSQL backups with Google Drive integration, and Docker Compose deployment.}
198+
\resumeItemListEnd
199+
200+
\resumeProjectHeading
201+
{Portable Anti-Collision System for Forklifts}{IoT and Web Project}
202+
\resumeItemListStart
203+
\resumeItem{Built a collision-prevention system using ESP32, Time-of-Flight sensors, and AWS IoT Core, with real-time safety monitoring through a React dashboard.}
204+
\resumeItemListEnd
205+
206+
\resumeProjectHeading
207+
{Virtual Career Fair Platform}{Full-Stack Project}
208+
\resumeItemListStart
209+
\resumeItem{Developed an automated interview scheduling platform integrating Google Calendar and Google Meet APIs to streamline recruiter-candidate workflows.}
210+
\resumeItemListEnd
211+
212+
\resumeSubHeadingListEnd
213+
214+
%-----------EDUCATION-----------
215+
\section{EDUCATION}
216+
\resumeSubHeadingListStart
217+
218+
\resumeSubheading
219+
{University of Moratuwa}{Aug. 2017 -- Jul. 2022}
220+
{Bachelor of Science (Honours) in Engineering -- Electrical Engineering}{Sri Lanka}
221+
\resumeItemListStart
222+
\resumeItem{Second Class Upper Division.}
223+
\resumeItemListEnd
224+
225+
\resumeSubHeadingListEnd
226+
227+
%-----------TECHNICAL TRAINING-----------
228+
\section{TECHNICAL TRAINING}
229+
\resumeSubHeadingListStart
230+
231+
\resumeSubheading
232+
{Institute of Java and Software Engineering (IJSE)}{Apr. 2020 -- Oct. 2020}
233+
{Advanced Business Solution Developer}{Sri Lanka}
234+
\resumeItemListStart
235+
\resumeItem{\textbf{Coursework:} Socket Programming, Web Applications, ORM, Hibernate, REST, Single Page Applications, and Document-Oriented Database Management.}
236+
\resumeItemListEnd
237+
238+
\resumeSubheading
239+
{Institute of Java and Software Engineering (IJSE)}{Feb. 2019 -- Sep. 2019}
240+
{Comprehensive Master Java Developer}{Sri Lanka}
241+
\resumeItemListStart
242+
\resumeItem{\textbf{Coursework:} Programming Fundamentals, OOP, DBMS, Data Structures and Algorithms, Application Architecture, Design Patterns, Reporting, Regular Expressions, Threads, and Java Modern UI.}
243+
\resumeItemListEnd
244+
245+
\resumeSubHeadingListEnd
246+
247+
%-------------------------------------------
248+
\end{document}

resume.css

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ button { font: inherit; }
9797
gap: 8px;
9898
align-items: center;
9999
}
100-
.resume-toolbar button {
100+
.resume-toolbar button,
101+
.resume-toolbar .download-button {
101102
width: 39px;
102103
height: 39px;
103104
display: grid;
@@ -114,7 +115,8 @@ button { font: inherit; }
114115
background-color .2s ease,
115116
transform .2s ease;
116117
}
117-
.resume-toolbar button:hover {
118+
.resume-toolbar button:hover,
119+
.resume-toolbar .download-button:hover {
118120
color: var(--lime);
119121
border-color: var(--lime);
120122
transform: rotate(12deg);
@@ -138,12 +140,13 @@ button { font: inherit; }
138140
font-size: 17px;
139141
line-height: 1;
140142
}
141-
.print-button {
143+
.download-button {
142144
color: var(--paper);
143145
}
144-
.print-icon {
146+
.download-icon {
145147
font-size: 17px;
146148
line-height: 1;
149+
transform: translateY(-1px);
147150
}
148151
.back-link { display: flex; gap: 10px; align-items: center; }
149152

@@ -655,7 +658,7 @@ html[data-layout="classic"] .resume-footer {
655658
width: 38px;
656659
height: 38px;
657660
}
658-
.print-button {
661+
.download-button {
659662
width: 38px;
660663
height: 38px;
661664
}

resume.html

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@
5757
>
5858
<span class="resume-theme-icon" aria-hidden="true"></span>
5959
</button>
60-
<button
61-
class="print-button"
62-
type="button"
63-
aria-label="Print or save résumé as PDF"
64-
title="Print / Save PDF"
65-
onclick="window.print()"
60+
<a
61+
class="download-button"
62+
href="assets/Tharuka-Chathura-Resume.pdf"
63+
download="Tharuka-Chathura-Resume.pdf"
64+
aria-label="Download résumé as PDF"
65+
title="Download résumé PDF"
6666
>
67-
<span class="print-icon" aria-hidden="true"></span>
68-
</button>
67+
<span class="download-icon" aria-hidden="true"></span>
68+
</a>
6969
</div>
7070
</header>
7171

0 commit comments

Comments
 (0)