Full-stack & AI engineer · embedded background · India

Sadhanala Nischay Prasad, full-stack & AI engineer Nine things I built
that you can open right now.

I write the whole stack — Next.js, FastAPI and Postgres on the web, Kotlin on the phone, C++ on the microcontroller — and the machine learning that decides things in between. The first nine projects below are deployed, and every claim on this page points at the file it came from.

Live deployments
9
Public repositories
70
Languages shipped
6
Projects detailed here
30

Experience

Internships.

Four internships across full-stack development, machine learning, data analysis and digital marketing, alongside a B.Tech at Malla Reddy College of Engineering & Technology.

  1. Veda TechnologyOct 2026 – PresentRemote · Hyderabad

    Digital Marketing Intern

    Daily tasks across the Digital Marketing track: competitor analysis, buyer personas, SEO, social media, email, landing pages, lead generation and Meta Ads, each published as its own repository.

  2. Oasis InfobyteOct 2026 – PresentRemote · Hyderabad

    Data Analyst

    Iris classification with four models compared, email spam detection at 98.8% accuracy using TF-IDF and Naive Bayes, and sales prediction with polynomial regression. All three run in a live demo site.

  3. Yuva Intern by Henry HarvinSep 2026 – PresentRemote · Hyderabad

    AI Pioneer (Machine Learning)

    Supervised machine learning: regression and classification with Linear and Logistic Regression, Decision Trees, Random Forest and KNN, compared on a held-out test set and 5-fold cross-validation.

  4. B.Y.T.E by Arithmatrix TechSep 2026 – Oct 2026Remote · Hyderabad

    Full Stack Engineer

    A full-stack development internship, completed with a verifiable certificate.

Certifications

Certifications.

From Microsoft, Google Cloud, Cisco, MongoDB, Tata and PNC through Forage, eDC IIT Delhi, Be10x and B.Y.T.E. Each links to the issuer’s own verification page where one exists.

Deployed

Live projects you can open.

Each frame below is a screenshot of the running app, and the address bar is the real URL. Click it and you are on the deployment.

Commons

A social platform on one shared, newest-first timeline. Posts, likes, comments, follows.

  • Next.js 15
  • React 19
  • TypeScript
  • Prisma 6
  • PostgreSQL
  • Tailwind v4
Idempotent by schema
Likes and follows upsert against composite unique constraints, so a double-tap cannot create a duplicate row. The button rolls its optimistic update back if the request fails.
One query per feed
Per-viewer likedByMe resolves inside the same findMany through a filtered relation include, against an explicit descending index on createdAt — no second round trip.
Redeploys keep your posts
A build-time provisioning script pushes the schema and seeds only when the users table is empty, so anything visitors wrote survives the next deploy.

Smart India Hackathon · SIH25031

CivicPulse

Photograph a civic problem; a vision model classifies it, routes it to the department that owns it, and checks the repair photos before it can be closed.

  • CLIP ViT-B/32
  • Transformers.js
  • Tesseract
  • Express
  • Socket.IO
  • OpenStreetMap
Refuses what is not civic
Twelve categories are scored from natural-language prompts, with a twenty-prompt distractor bucket for screenshots, pets and clean roads. Fail that or a 0.35 probability floor and the upload comes back 422 rather than being filed wrong.
Location from the photo, not the phone
A hand-written EXIF parser reads the camera’s own GPS and outranks the browser fix; Tesseract reads street signage in the frame and geocodes it to snap the pin to a real premises.
Recycled proof is blocked
Perceptual hashes compare every “after” photo against the “before” set. A Hamming distance of five or less is treated as reused evidence and hard-rejects the closure.

Transmission

Real-time chat with friends, end-to-end encrypted private conversations, and voice and video calls.

  • Next.js 15
  • WebCrypto
  • WebRTC
  • Server-Sent Events
  • PostgreSQL
  • 4 runtime deps
The server stores what it cannot read
Private messages are encrypted in the sender’s browser with AES-GCM under ECDH-derived keys and stored as ciphertext. Once a conversation carries an encrypted message, the server refuses plaintext into it, so an old client cannot quietly downgrade it.
Keys you can check
Two friends compare a 60-digit safety number. Swap either person’s key and the number changes, which a test asserts.
Calls without a call server
Voice and video run browser to browser over WebRTC. The server relays only call setup, and that is sealed too, so it can neither read the network details inside nor swap in its own fingerprint to intercept the media. No crypto or WebRTC library is involved: the whole app has four runtime dependencies.
Real-time where sockets cannot live
Serverless functions cannot hold a WebSocket open, so Postgres is the fan-out point: each stream tails rows past a BIGSERIAL cursor and hands the browser a resume point before the function times out.

Client work

Steel Access Doors

A redesigned website for Steel Access Doors, a clean-room solutions company in Hyderabad, with a 3D model of every product.

  • Three.js
  • WebGL
  • JavaScript
  • No build step
A model for every product
Each of the 19 products has its own 3D model, built in code to match its product photo, down to the handles and hinges. Visitors can rotate and zoom it, and tap a door or pass box to open it.
The home page is a doorway
Scrolling swings open a steel double door and carries the camera into a clean room, showing the product in the setting it is made for.
Still works without the 3D
Without WebGL, or if the 3D library cannot load, it falls back to a CSS doorway and product photos, and it respects reduced-motion settings.

Credential

An authentication service built around refresh-token theft rather than the usual hash-and-issue demo.

  • Express 5
  • TypeScript
  • Argon2id
  • PGlite
  • React 19

Refresh tokens are opaque and stored only as digests. Every refresh retires its predecessor inside one transaction; replaying a retired token is read as a copy and revokes the whole rotation family. Access tokens carry a session id that is re-checked on every request, so “sign out everywhere” is immediate rather than waiting out the token lifetime.

SplitUPI

Splits group bills, then works out the fewest UPI transfers that clear everyone.

  • Vanilla JS
  • Zero dependencies
  • PWA
  • 162 tests in CI

Greedy matching settles a group but not minimally, so the solver runs a bitmask search for disjoint zero-sum subgroups and settles each pocket on its own — checked against brute force over 381 random ledgers. Money is integer paise throughout, so all six split strategies reconcile to the last paisa. The QR encoder and the UPI deep-link builder are both written from scratch.

A Greenve project

Smart Dustbin

Touchless ESP32 bin with a fleet dashboard, plus an in-browser twin of the firmware.

Greenve is a startup idea I’m building with Reddi Malli Nandini and Rohit Singh, and the Smart Dustbin comes under it.

  • ESP32
  • Embedded C++
  • Firestore
  • 486 checks

Rubbish is never flat, so one downward sensor over a peak reads “full” at half empty. Two sensors on opposite diagonals are fused into one figure, flagging an uneven load when they disagree by more than 25 points. From 90% the lid refuses a hand; the only ways past are a safety re-open and the collection crew’s override. The map shows 48 simulated bins across Hyderabad, identical in every browser, with Firestore sharing what visitors and any real board actually did.

Tally

Turns a supplier invoice into a picking checklist that staff tick off and photograph, and an admin signs off.

  • Node
  • Express 5
  • SQLite
  • OCR
  • Server-Sent Events

It reads whatever the supplier sent: a structured model read, then the PDF text layer, then OCR, keeping the best result. A dependency-free parser proves each line by finding quantity × price ≈ amount among its numbers, across US, Indian-lakh and European digit grouping. Every PDF is opened in a short-lived child process with a memory cap, so a hostile file fails one upload rather than the server.

AI & machine learning

AI and machine learning projects.

Each one runs on simulated data on an ordinary laptop, with no GPU, and turns a model’s output into a decision someone would act on. The figures are from each project’s own evaluation.

Autonomous Navigation System

20 tests

A complete self-driving robot stack in a 2D simulator: it sees, tracks, maps, plans a route and drives it, with a safety layer that can stop it.

From camera to steering
OpenCV perception and object tracking feed an occupancy map built from LiDAR and camera. A* or Dijkstra plans the route, and pure-pursuit control follows it.
Zero collisions across 33 runs
Three planners on eleven maps reached the goal every time without a collision. A* found the same optimal path as Dijkstra while expanding 56% fewer nodes, and replans in about 19 ms.
  • Python
  • OpenCV
  • A* / Dijkstra
  • Pure pursuit

Energy Demand Forecasting

3.4% MAPE

Forecasts a city zone’s hourly electricity demand a week ahead, then turns it into peak alerts and load-shifting plans.

Beats the obvious baseline
An R² of 0.95, with error 53% lower than a naive baseline forecast.
Priced in rupees
The forecast drives simulated procurement and load shifting, so the result is reported as money saved rather than only as model error.
  • scikit-learn
  • pandas
  • Forecasting

Predictive Maintenance for IoT

F1 0.89

Predicts which machine will fail and why, from temperature, speed, torque and tool-wear sensors on simulated milling machines.

Modelled on a real benchmark
The simulated data follows the structure of the UCI AI4I 2020 predictive-maintenance dataset, and the real dataset can be dropped in.
Watches a machine live
A virtual machine streams readings, and the model raises a maintenance alert before it breaks down.
  • scikit-learn
  • Random Forest
  • IoT simulation

AI Threat Detection

7 tests

A machine-learning intrusion detector for simulated network traffic, covering denial of service, port scans, brute force and data exfiltration.

Known and unknown attacks
A Random Forest catches attack types it was trained on, while an Isolation Forest learns what normal traffic looks like and flags anything new.
Alerts an analyst can use
Detections become security alerts mapped to MITRE ATT&CK techniques, and the whole pipeline runs in under a minute.
  • scikit-learn
  • Isolation Forest
  • MITRE ATT&CK

Data analytics

Data analytics projects.

End-to-end pipelines: messy data in, cleaned, tested statistically, and out as a Streamlit dashboard and a written set of findings.

Climate Trend Analyzer

4 Indian cities

35 years of climate data for four Indian cities, tested for trends and forecast forward.

Warming, measured properly
Mann-Kendall tests find warming in all four cities, at 0.18 to 0.32 °C per decade, with Delhi fastest.
Catches extremes
Z-score and Isolation Forest detection found 98% of injected heatwaves, and SARIMA forecasts the years ahead.
  • statsmodels
  • SARIMA
  • Streamlit

Retail Forecasting & Inventory

60 store-products

Forecasts daily demand, then turns it into reorder points, safety stock and purchase orders.

An honest backtest
Models are judged on a 56-day recursive backtest against a seasonal baseline, on data that includes festivals, promotions and supplier delays.
Fewer empty shelves
In simulation, the new reorder policy cut stockout days from 6.7% to 2.2%.
  • Random Forest
  • EOQ
  • Streamlit

Employee Performance Predictor

76% accuracy

Predicts whether an employee will be a low, medium or high performer, and suggests an HR action for each.

Four models compared
Trained on 2,000 synthetic employees and scored on 400 it had never seen, with an F1 of 0.76.
Findings, not just a score
Employees in the top quarter for training hours were predicted high performers 49% of the time, against 14% for the bottom quarter.
  • scikit-learn
  • HR analytics
  • Streamlit

Poll Results Visualizer

Chi-square

Turns raw poll and survey responses into vote shares, regional breakdowns and trends.

Margins of error included
Every share comes with a 95% margin of error, and the gap between leader and runner-up is tested for significance.
Filter it yourself
A dashboard filters by region, age, gender and date, and accepts your own CSV.
  • SciPy
  • Plotly
  • Streamlit

Expense Tracker Analytics

Personal finance

Analyses a year of spending: category share, budget against actual, savings rate and unusual transactions.

Realistic without real data
Bank data is private, so a seeded simulator reproduces real habits like rent, festive spending and weekend patterns, plus deliberate data-quality problems to clean.
  • pandas
  • Jupyter
  • Streamlit

Data Preprocessing Study

ROC-AUC 0.93

Cleans and prepares the UCI Adult census dataset, and measures what each preprocessing choice actually changes.

Shows how leakage cheats
Fitting a target encoding before the train/test split inflated the test score by 0.026. Doing it after the split removes that false gain.
  • pandas
  • scikit-learn
  • Jupyter

Security

Security, from the defending side.

ScamShield runs on a phone. The other five are dashboards that run on synthetic data or your own answers, and none of them scans, scrapes or contacts anything real. None is hosted, so here is what each one does.

ScamShield

Kotlin · Android

Screens incoming SMS and chat notifications for Indian scam patterns entirely on the phone, and explains each warning in English or Hindi.

The detector has no network
The manifest strips INTERNET with a merger directive, so permissions that bundled libraries add are removed. Nothing about a message can leave the device.
Trilingual rule engine
Nineteen weighted rules built from forty-four regexes across English, romanised Hinglish and Devanagari. One is negation-aware, so “never share this OTP” stays quiet.
Lookalike domains and fake VPAs
Nine character substitutions are applied before matching a host against twenty-five real brand domains; UPI IDs are checked against a fifty-seven entry allowlist of genuine PSP handles.
The model may only escalate
An optional on-device language model rewrites the warning in plain words and can raise a verdict, never lower one. The rules stay in charge.

Phishing Detector

57 tests

Paste an email and it scores how likely it is to be phishing, then lists exactly why.

Every score comes with reasons
A rule engine flags credential requests, urgency, lookalike senders and suspicious links, and an optional model adds a probability. The final score blends them 60/40, so the rules still drive it.
It never opens a link
The analyser makes no network requests at all, and URLs are shown defanged, like hxxp://198[.]51…, so nothing on screen is clickable.
  • Flask
  • scikit-learn
  • Explainable scoring

Password Analyzer

73 tests

Scores a password the way attackers actually guess, and says what to change.

Nothing worth stealing
There is no password column anywhere, not even a hash, because people type real passwords into checkers. Only the score and length are kept, and a test proves the column does not exist.
Entropy that knows about patterns
It shows the textbook length × log₂(alphabet) figure beside a pattern-adjusted one, so you can see why Password123! scores high on the formula and falls to a guess list.
  • Flask
  • Pattern analysis
  • Data minimisation

Social Media Privacy Risk

65 tests

A questionnaire about your own settings and habits that scores how exposed you are across ten areas.

It never asks for the secret
It asks whether your phone number is public, never what the number is. It does not scrape or track anyone.
See what fixing it would do
A what-if simulator re-scores you with improved settings, so you can see how much each change would lower the risk before you make it.
  • Flask
  • Risk scoring
  • Privacy by design

Threat Intelligence Dashboard

40 tests

Validates, enriches, scores and correlates threat indicators, and teaches people to recognise the same threats.

Risk and confidence are separate
How dangerous an indicator is and how sure we are of it get different scores, with sources graded A to F for reliability. A match is not reported as a confirmed breach.
Mapped to ATT&CK, never guessed
Observed behaviours map to named MITRE ATT&CK techniques, and indicators are only checked for syntax: none is ever visited, resolved or contacted.
  • Flask
  • MITRE ATT&CK
  • pandas

Network Intrusion Detection

37 tests

A simulated intrusion detection system: it generates synthetic traffic, detects attacks in it, and gives a security analyst a dashboard of scored, grouped incidents. It never captures real packets.

Three ways to catch an attack
Signature rules catch known patterns, a statistical model flags traffic that drifts from a learned baseline, and an optional Random Forest adds a third opinion. All three feed one risk score.
Fewer, better alerts
Alerts about the same activity within a time window are merged into one incident, and the dashboard reports how much that cut the alert count.
  • FastAPI
  • React
  • scikit-learn
  • Synthetic traffic

Cloud series

Five services, one architecture.

Each is a FastAPI API with a React front end, tested in CI, and its database moves from SQLite to managed Postgres by changing one environment variable. The three that store files do the same from a local folder to an S3-compatible bucket. None is hosted, so here is what each one does differently.

Seatline

54 tests

Event planning with live RSVPs. Organisers publish; attendees answer going, maybe or not going, and every open dashboard updates without a refresh.

It cannot oversell the last seat
A seat is taken with one conditional UPDATE that only succeeds while the going count is below capacity. The loser of a race changes no rows and joins the waitlist, and a CHECK constraint enforces the same rule inside the database.
Proved with a real race
The suite releases thirty users on a thread barrier at the same instant, against PostgreSQL in CI, and asserts that exactly the capacity get in.
  • FastAPI
  • WebSockets
  • PostgreSQL
  • React 18

Smart Plant Care

70 tests

Virtual sensors, or an optional ESP32, report soil moisture, temperature, humidity and light. The cloud decides when to water and sends the pump command back to the device.

Watering has hard limits
The engine stops the pump at a maximum run time to prevent overwatering and enforces a cooldown between waterings, with thresholds set per plant profile.
Hardware optional, not faked
A simulator stands in for the sensors and pump, and real ESP32 firmware sits in the same repository. A device that stops reporting is marked offline and raises an alert.
  • FastAPI
  • ESP32
  • IoT simulator
  • React

Assignment Portal

67 tests

Teachers publish assignments, students upload their work, and teachers return marks and written feedback.

Private files, short-lived links
Submissions go to a private bucket and are only reached through signed links that expire after five minutes.
The server decides what is late
Lateness is stamped at submission time and kept after grading, so the timestamp is not something to argue about. The same app also runs on AWS Lambda through Mangum.
  • FastAPI
  • S3-compatible
  • AWS Lambda
  • React 18

Hobby & Skills Tracker

56 tests

Log practice across hobbies, set goals, and share progress on a community feed with likes, comments and follows.

Uploads are checked by content
Files are validated by their first bytes rather than their extension, and served through signed links that expire.
Retries cannot double anything
Likes, reports and new posts carry database uniqueness constraints, so a repeated request cannot create a second row.
  • FastAPI
  • S3-compatible
  • Community feed
  • React 18

Personal Diet Planner

297 tests 97% coverage

Builds a personal meal plan from a user’s profile and stores the plans and files in the cloud. Plans are general-wellness examples, not medical advice.

Works without the model
A rule-based engine that needs no internet, API key or GPU generates plans on its own and takes over whenever the optional language model is unavailable. Each plan records which one produced it and why it fell back.
Tested three ways
The 297 backend tests run on Python 3.11 and 3.13 against SQLite, and again against PostgreSQL, at 97% coverage, alongside 31 front-end tests, an end-to-end smoke run, and the full stack started from its Docker image.

Where I started

Firmware, and the habit it taught me.

You cannot attach a debugger to a bin on a street corner, so I learned to write the deciding part separately and prove it on a laptop first. That habit is why the web projects above have test suites.

Smart Parking

ESP32 · 4× HC-SR04 · LCD · servo barrier

A sensor above each bay compares echo time against a threshold — a long return is floor, a short one is car roof — and the entrance display reads the count before you drive up the ramp.

Source ↗

Anti-Theft Locker

Arduino UNO · RFID · fingerprint · GSM

Opens for an authorised card or an enrolled finger, and texts the owner when neither matches. Alerts are rate-limited so a jammed reader cannot flood the phone, and the relay is driven to a known locked state at boot.

Source ↗

Heartbeat Monitor

ESP32 · PulseSensor · Blynk

Alerts outside 60–100 BPM. The problem was never the sensor — a naive threshold check fires on every sample and buries the phone — so alerts fire on the transition and rearm on return. Educational prototype, not a medical device.

Source ↗

Earlier

Earlier projects

Earlier projects with platform and description
ProjectPlatformWhat it doesSource
Encryption Tool Java · Swing AES-256-GCM with PBKDF2, a fresh salt and IV per file, and a versioned header authenticated as additional data so it cannot be silently altered. Source for Encryption Tool
Smart Home Controller ESP32 · Blynk Two relay channels, temperature and humidity, and motion detection; relay state resyncs to the app on reconnect. Source for Smart Home Controller
Complaint Management Java · REST Register and log in for a token, then carry it on protected routes via an auth header. Source for Complaint Management
Hotel Booking Java 17 · console Date-range availability search that rejects overlapping bookings, with billing on decimals rather than floats. Source for Hotel Booking
Socket Chat Python · TCP Multi-client console chat on raw sockets: public messages, private messages, nickname management. Source for Socket Chat
Listful & Taskflow HTML · CSS · JS Two dependency-free task managers with local persistence, JSON import and export, keyboard shortcuts and labelled controls. Source for Listful and Taskflow
AI & ML Training Python Coursework and practice notebooks from machine learning training. Source for AI and ML Training
Oasis Infobyte tasks Python · ML Data science internship tasks: iris classification, email spam detection with TF-IDF and Naive Bayes, and sales prediction. Source for Oasis Infobyte tasks
Model deployment Flask · scikit-learn A trained classifier saved, then served as a Flask web app that takes inputs and returns predictions. Source for Model deployment

Tools

Tech stack

What I have shipped something with, not what I have read about.

Languages

  • TypeScript
  • JavaScript
  • Kotlin
  • C / C++
  • Java 17
  • Python
  • SQL

Web

  • Next.js 15
  • React 19
  • FastAPI
  • Flask
  • Express 5
  • Prisma
  • Tailwind
  • Zod
  • WebSockets
  • Server-Sent Events
  • WebRTC
  • REST

Data

  • PostgreSQL
  • SQLite
  • SQLAlchemy
  • PGlite
  • Firestore
  • S3-compatible storage
  • localStorage

Security

  • End-to-end encryption
  • Argon2id
  • bcrypt
  • JWT rotation
  • AES-256-GCM
  • ECDH
  • WebCrypto
  • MITRE ATT&CK
  • OAuth / JWKS
  • CSRF & CSP

ML, data & mobile

  • scikit-learn
  • pandas
  • NumPy
  • statsmodels
  • OpenCV
  • Streamlit
  • Plotly
  • Jupyter
  • CLIP
  • Transformers.js
  • Tesseract
  • Jetpack Compose
  • MediaPipe
  • ML Kit

Embedded

  • ESP32
  • Arduino
  • HC-SR04
  • RFID & fingerprint
  • GSM
  • I²C / SPI / UART
  • Wokwi

Practice

  • Git
  • GitHub Actions
  • Docker
  • Vercel
  • AWS Lambda
  • GitHub Pages
  • pytest
  • node:test
  • Vitest
  • JUnit

Marketing

  • SEO audits
  • Keyword research
  • Content strategy
  • Email campaigns
  • Meta Ads
  • Canva

About

I started on microcontrollers, where you cannot attach a debugger to a bin on a street corner. So I learned to write the deciding part on its own and prove it before it ships.

That is the thread through everything here. The settlement solver in SplitUPI is checked against a brute-force search. The token-rotation logic in Credential is driven through a real replay attack in its tests. The bin’s firmware has an in-browser twin so the same assertions run without the hardware.

Moving to the web did not change the habit, it just changed the language. I am looking for full-stack or backend work, and I am equally happy on the side of a product that talks to hardware.

Greenve I’m also building Greenve, a startup idea, with Reddi Malli Nandini and Rohit Singh. The Smart Dustbin comes under it: a bin that opens without being touched and tells the city when it needs emptying.

Digital marketing

Digital marketing work.

Alongside the engineering, I work through the Digital Marketing track of the Veda Technology internship: strategy, SEO, social media, email and paid campaigns, each for a set business brief. The businesses are fictional, apart from the real brands in the competitor analysis and the audit of this site.

Crumb & Co. strategy

A six-month digital marketing strategy for a fictional home bakery launching online, built with free tools only.

  • SMART goals
  • Personas
  • Content pillars
  • KPIs
Starts from the business goal
150 online orders a month within six months, a quarter of them from repeat customers, before any platform is chosen.
Every channel is justified
Instagram, Google Business Profile and WhatsApp Business, each chosen for how the audience finds and buys. Paid ads are left out because the brief allows only free resources.
Measured from day one
Each goal maps to KPIs with a target, a tracking tool and a review schedule, kept in a shared tracker.

Internship tasks

Digital marketing internship tasks, grouped by area
TaskAreaBriefRepository
Competitor analysisStrategyThree Indian D2C skincare brands compared: Minimalist, The Derma Co and Plum.Repo for Competitor analysis
Buyer personaStrategyA buyer persona for FitBowl, a meal subscription.Repo for Buyer persona
Marketing funnelStrategyA basic funnel for StudyNest, an AI study planner for college students.Repo for Marketing funnel
SEO homepage copySEOSEO-friendly homepage content for GreenNest Home.Repo for SEO homepage copy
Keyword researchSEOBasic keyword research for PureGlow Organic Skincare.Repo for Keyword research
Titles & meta descriptionsSEOOptimised title tags, meta descriptions and target keywords for five pages.Repo for Titles and meta descriptions
Heading structureSEOA webpage’s headings redesigned into a clear H1, H2 and H3 hierarchy.Repo for Heading structure
SEO auditSEOAn on-page audit of this portfolio: 15 issues found and prioritised. Its fixes are applied to this page.Repo for SEO audit
SERP & search intentSEOGoogle first-page results analysed for five keywords, each a different search intent.Repo for SERP analysis
Blog content planSEOA keyword-led blog plan for BrewNest Coffee.Repo for Blog content plan
Google Business ProfileLocal SEOAn optimisation plan for a local business listing.Repo for Google Business Profile
Instagram calendarSocialA 30-day content calendar for The Quiet Cup, a café.Repo for Instagram calendar
Social media postsSocialFive post designs for Brew Haven Café.Repo for Social media posts
Hashtag strategySocialResearched hashtag categories for Horizon Digital.Repo for Hashtag strategy
Captions with CTAsSocialTen captions, each mapped to an objective, an audience and a call to action.Repo for Captions
Email campaignEmailA three-email launch campaign for StudyNest.Repo for Email campaign
Email newsletterEmailA mobile-friendly newsletter for Stack Notes, built in HTML.Repo for Email newsletter
Landing page planConversionA conversion-focused landing page for Ledgerly, a concept GST invoicing app.Repo for Landing page plan
Lead generationConversionA free three-day gym trial campaign, with a lead tracker.Repo for Lead generation
Meta Ads planPaidA basic Meta Ads campaign for FitNest Studio, with three ad creatives.Repo for Meta Ads plan

Let’s talk.

Open to full-stack, backend, AI/ML and embedded roles, and to internships.