Dmitry Shishov standing with his arms crossed

Dmitry Shishov

Full-Stack AI Developer, Design Engineer and Product Owner

Just Envision ItDmitry turns ideas into functional, sophisticated and secure apps powered by AI

In numbers
0+ years of working experience
0 full brand and product ownerships
0k+ lines of Python and TypeScript shipped
0+ visuals created
0 spoken languages
Eng Spa Rus Cat Fra Srb
0+ modern tools integrated
Four pillars

What I bring to the table

AI Engineering

  • AI integration: voice, chat, reasoning, rag, tools, and actions in your app
  • Context + Prompt engineering for an accurate AI response
  • Whatever model fits the job, with no provider locked into the architecture
  • Secure inference backends with per-token cost control

Full-Stack Development

  • First app / web app / landing page iterations in under 24 hours
  • React, React Native, TypeScript, Python alongside AI-Augmented flow
  • From landing pages with payments to full web and mobile apps
  • Whole products built: frontend, backend, security check, deployment

Product Ownership

  • Full product analysis, deep insights and quick product solutions
  • Scope discipline: what a product must do, and what it must never do
  • Priority calls on what ships next, and what gets cut
  • Clear and effective communication across teams, clients and stakeholders

Design Engineering

  • Analytical approach to qualitative UX/UI implementation
  • Figma design systems and fast delivery of interactive prototypes
  • The same hands that design the screens write them in codebase
  • One consistent design language from first sketch to shipped screens
Toolbox

Tools I reach for daily

AI workflow

  • Claude Code
  • Codex
  • Cursor
  • Google AI
  • Artlist

Design and media

  • Figma
  • Canva
  • DaVinci Resolve
  • Screen Studio

Code

  • React & React Native
  • Python
  • LangChain
  • TypeScript
  • JavaScript
  • CSS
  • HTML5

Version control

  • GitHub
  • GitLab

Backend, environment and tooling

  • Supabase
  • Docker
  • Postman
  • Expo
  • Vercel
  • Render

Web and analytics

  • WordPress
  • Elementor
  • Google Search Console
  • Google Analytics

Business operations

  • Stripe
  • Google Admin Console
  • CRM Systems
  • Microsoft 365
  • Meta
Selected work

Products I own end to end

01

Clever School - Clever App

Brand identity and web presence for an international school in Serbia, plus the Clever App I own end to end: mobile app for parents, web for teachers. Grades, attendance, homework and invoices for 250+ students in one record, with an AI agent answering parents in their language.

Onsite school → View the mockups →

Inside the school before designing for it

The school had a fractured identity: competing logos, no brand system, no landing page, and messaging that changed depending on who was speaking. Before designing anything, I went into the school and sat with the staff. I watched teachers take attendance between lessons, the office handle absence notes and fees, and leadership and the psychologist field meeting requests, and I learnt how each process actually ran. Then I turned to the parents. They wanted one place for grades, attendance, homework and invoices, in their own language, instead of paper notes and calls to the office.

OutputAgreed positioning and core values, a map of the school’s internal processes, and the parents’ needs written down as the brief for the app.

One identity, one record

I created the school’s complete visual identity from the ground up as one system: logo, palette, typography, messaging and core values. The app follows the same logic. Everything that happens to a student is recorded once, by the person closest to it, and shown in the right form to the right person: in the iOS app for parents, and in the web app for teachers.

OutputA single identity replacing the competing versions, and two apps built on one shared record.

Guidelines for the brand, a specification for the app

I turned the identity into standing brand guidelines, now the school’s reference across digital and physical materials. For the app, I wrote the full concept and functional specification. It maps 23 functionalities to roles and permissions. Attendance is taken per lesson in seconds and works offline, and behaviour is flagged with one tap. An append-only audit log is included because the records concern minors.

OutputA brand that holds without policing, and a specification a team can build from.

A landing page, and AI that interprets rather than decides

I designed and developed the landing page for the Novi Sad campus, which serves primary, secondary and pre-university levels. The application path is the page’s primary job. In the app, the Clever Agent answers parents in English, Serbian or Russian within their own permissions. It also writes a daily summary per child and warns tutors when a student starts to drift. It never publishes a grade or shows a risk signal to a family.

OutputA live page that moves visitors toward enrolment, and AI with a human always between the model and the record.

Higher conversion, and full ownership of the app

The redesign produced a measurable increase in both site conversion and application rates. The aligned branding is driving a significant rise in new student volume. I act as a key decision-maker on brand and product direction, and leadership adopts my proposals directly. The Clever App is mine end to end: discovery, product definition, scope, what it must never do, and every call on what ships next.

02

Gymmate

An AI exercise coach, now an iOS app in TypeScript over a Python backend. One short chat and they get a four-week plan for their strength level, every session with its sets, reps, rest and cues, refined in plain language or spoken to from a locked screen that starts the exercise, runs the rest and answers back.

Join the test → View the mockup →

A plan read in a gym, not at a desk

The exercises are not the missing piece. Every workout builder already has them, SimplyFitness’s among them. What they leave to the user is the assembly: the split, the movements, every set, rep and load, again and again for each session of the month, slow and entirely manual, and all of it learnt before the app gives anything back. Gymmate does that work instead: a few questions in a chat, then a personalised month that can be changed by saying so in a message. And it belongs on a phone, because the plan is read one set at a time, standing up, with a rest running.

OutputThe manual half of a workout app handed to an assistant, and safety rules that outrank the prompt: never diagnose, never through an injury instead of around it, never a load their numbers don’t support.

Sketched on paper, decided in code, read between sets

It started on paper, went through Figma and Claude Design, and then the real decisions moved into code, because a card read standing up with a rest running can only be judged on a phone in a hand. The intake is a chat rather than a form: it asks one thing at a time, accepts “about 180 pounds” or “I don’t know” as answers, and stops as soon as it has what it needs.

The month then reads as one card per movement, carrying its load, its cue, its picture and its stopwatch. Every state was drawn before it was built: the plan generating, a set in progress, a rest running, a month finished. A card never draws blank, because 150+ exercise visuals were drawn in-house and anything outside that library is rejected before it reaches the screen. Hold a card down and it becomes what the chat is about; press its target and the session is under way. It is iOS 26 liquid glass with SwiftUI where only native does it right, the rest timer and the lock-screen Live Activity, in both themes from one token file, and it went to TestFlight testers early so what they actually did in a gym could rewrite it.

OutputThree tabs in React Native with SwiftUI at the edges, 150+ visuals, every state designed, glass in both themes, read one-handed in a noisy gym.

TypeScript on the phone, Python where the numbers are

Expo, React Native, React 19 and Zustand on the phone; a FastAPI backend behind it where every call to Claude goes through one module and the key never reaches the device. Plans come back as structured objects: the shape is a tool schema and the call is forced with tool_choice, so what arrives is already validated, with no JSON to parse, and each key renders straight to a card. The model never sees the whole exercise library either: a local filter puts only what this person can lift in front of it, so a prescribed movement is one it was shown, and a name outside the library is rejected server-side rather than drawn as a blank tile.

The arithmetic stays in Python: BMI, one-rep-max estimates, the five-level banding, every date in the four weeks. The static half of the system prompt is cached; Haiku throughout, since every call happens while they wait. The rest timer is SwiftUI written from TypeScript: two dates go up once and iOS draws the count while the phone sleeps.

OutputRoughly 7,800 lines of TypeScript over 7,100 of Python: validated structured output, a closed library, cached prompts, and native work where only native does.

Changes in their own words, and an account behind them

Refinement happens in plain language: a routing tool turns “swap the deadlifts for something my back can handle” into an edit of the card they are holding, rewritten against that card’s own schema, so a misread request is one wrong card, never a rewritten month. Said out loud it needs no app: a Control Center button records through a locked screen, since the rest card there is what lets it hold the microphone, and the same assistant starts the exercise, runs the rest, answers anything about the gym, their level or the plan, and reads it back. On screen it streams over SSE, cites its form notes and finds a video by search, every link checked. Accounts came with it: Supabase behind the same backend, the anon key stays there, their token goes up, and row-level security picks the row.

OutputNatural-language editing spoken or typed, grounded links, a month that still goes in a gym bag, and one row nobody else’s token can reach.

Metered, tracked, and on TestFlight

A card starts when its target is pressed and is spent when the rest has run its whole length once per set, so what they actually did is recorded beside what was prescribed. A week before the month runs out the app asks five direct questions, and the next one is written from the answers rather than from the interview again. Every call is billed by the token, so an account gets five dollars a month and a phone with no account a dollar, counted in a ledger that can only be added to.

Before a build goes out it is run through an AI Security Agent I built for exactly this: a hybrid static and dynamic scanner that reads the code, exercises the live backend and the LLM endpoint, and grades what it finds against the OWASP Web, Mobile and LLM Top 10. Crafted for securing these apps and the way they are developed, it catches around 90% of the potential vulnerabilities, with a code fix and a payload proof beside each one. What comes back is a Markdown report and a content-identical HTML one built on Tailwind, with a sophisticated structure and design: metric cards across the top, severity badges on every finding, per-domain coverage meters, and each finding collapsed to a line until it is opened, so a full audit reads as a page rather than a log.

The backend ships as a Docker image, the app builds through EAS, and every decision above lives beside the code.

03

AI Security Agent

A hybrid SAST, DAST and fuzzing agent for web, mobile and LLM apps. It clones a GitHub repository, audits it against the OWASP Top 10 and opens a pull request with a graded report and a fix per finding. 90% detection. Python, LangChain and LangGraph.

View the HTML example →

One scanner for a stack that is web, mobile and LLM at once

A product I build is usually three attack surfaces in one repository: a web backend, a mobile client and a model endpoint. The scanners on the market cover one of those, bury the real issue under false positives, and never show whether a finding is actually exploitable. So the agent had to detect which domains a repository contains, run the right static and dynamic tools for each, ground every judgement in the OWASP Web, Mobile and LLM Top 10, and prove a finding live before it makes the report.

OutputA product definition: hybrid, multi-domain, grounded in the OWASP documents, and proof-bearing for every finding.

The report was designed first, for people who do not read code

The report came before the pipeline. A grade from A to F and a risk score at the top, three metric cards for static hits, dynamic hits and correlated threats, then a coverage meter per domain that shows what the tools could see, not only what they found. Each finding stays collapsed to one line until opened, then gives its severity badge, OWASP category, file and line, and two tabs: a Code Fix and a Live Exploit with the payload that proved it. Markdown for the repository, the same content as HTML for the team.

Every state was designed as well: no code found, a tool missing, no live target, the model unavailable. Each still produces a report and says what it could not do.

OutputA seven-section report structure, and a fallback for every failure mode.

Five nodes on LangGraph

Python, LangChain and LangGraph throughout. A detector reads the repository and picks the domains. A scanner runs Semgrep with registry rulesets and bundled rule packs for web, mobile and LLM code. A dynamic runner exercises the live app: Nuclei against the web target, throwaway credentials against every login and register route to catch an authentication bypass, mobsfscan on the mobile tree, a fuzzer, garak or an embedded one, against the chat endpoint. A deterministic correlation step links each dynamic hit to the source that produced it. Then Claude, acting as an auditor with the OWASP documents in context and structured outputs enforced, dismisses false positives, grades severity and writes the fix. A reporter renders it all with Jinja2.

OutputOne graph from detector to report, static and dynamic evidence merged into a single graded finding.

A pull request on GitHub, safe by default, honest about cost

Wired to the GitHub API, the agent clones the repository, runs, and opens a pull request with the Markdown and HTML reports inside it, so the audit arrives where the team already reviews code. It boots the target itself from its Docker Compose file, health-polls it, scans it and tears it down. Only loopback and private addresses are scanned unless a flag says otherwise, so it never fuzzes someone else’s infrastructure by accident. Every category the auditor assigns is validated against the headings actually present in the OWASP documents. Only the triage step spends tokens, the count is printed in the report, and a static-only run costs nothing. A missing tool degrades to a warning rather than a failure.

OutputRuns on any GitHub repository, delivers as a pull request, spends tokens only where judgement is needed, and never leaves a container behind.

90% detection, and every product I build goes through it

Benchmarked on documented vulnerabilities from the OWASP Top 10 for web, mobile and LLM, the agent reaches 90% detection, each finding with a fix and a proof. It now runs on every product I build before a release, each audit landing as a pull request. It ships as a command-line tool with a pytest suite, a deliberately vulnerable demo application to try it on, and the example report linked above.

A working security agent at 90% detection, in use on everything I ship, and a foundation the next audit rule can be added to.

04

Mentor

A holistic lifestyle iOS app powered by AI that grades six key areas of your life and coaches you to your prime, daily. Applied AI engineering at its core: context from live user data, streaming tool use that acts on real plans, voice input, 13 edge functions.

getmentor.tech → Join the test → View the mockup →

Defining what an AI habit companion actually has to do

An idea on paper. No product, no code, no interface. The first job was turning that concept into a defined product: what does an AI habit companion actually do that a notes app or a generic chatbot can’t? The answer shaped everything. It has to know the user’s real state, and it has to act on their plan rather than describe good intentions. I mapped the core loop (capture, plan, do, reflect) and decided early that the AI would be an applied system, not a chat box bolted onto an app.

OutputA clear product definition, a prioritized feature set, and the architectural constraint that drove every later decision.

A token system first, then 30+ screens on liquid glass

Paper sketches, then Figma and Claude Design, then React 19 and React Native, with a token system for type, colour, spacing and motion set down before the first screen so that 30+ screens would feel like one product and a change would be made once. Liquid glass was a decision, not a default: six graded areas of a life and a daily loop are dense, and glass lets the thing being done sit above the plan it belongs to without hiding it. Friction in that loop was treated as a functional bug, because a habit app only earns its next open if every interaction is effortless.

The assistant was designed as a surface, not bolted on: message cards, a typeface and a tone that keep its answers calm and easy to follow, and a drawn state for every moment in between, from thinking to a failed call. The identity travels with it: transparent-background holograms that rotate on scroll on the web and turn continuously in the app, so the site and the phone are recognisably the same thing. Prototypes went out early and in the open, were validated before implementation, and are now being reworked from what TestFlight users do rather than what they say.

OutputA token system, 30+ screens, an AI conversation surface with every state designed, and a visual identity that holds from the web to the app.

The grounded, tool-using AI layer at the heart of the product

The heart of the product. Users talk to it by voice through OpenAI Whisper or by text, and a custom context-engineering layer assembles every request from their live profile, habits and progress, so the model reasons over grounded current state rather than generic advice. A system prompt shapes tone, structure and what the assistant is allowed to advise. Because that context grows with the user, I built context-window management and token accounting into the pipeline to keep cost and latency predictable.

On top sits a streaming Claude integration with tool use, giving the model defined operations to read and modify scheduled activities and the long-term plan, so the assistant acts on the app’s data instead of just talking about it. Web search extends that reach outward, surfacing a relevant video or academic paper when a goal calls for it.

OutputAn AI layer that is grounded, capable of taking action, and economically viable at scale.

React Native and Supabase wired around the inference layer

React Native, Expo, React 19 and Zustand on the frontend, wired to the design tokens. A complete Supabase backend behind it: PostgreSQL with row-level security, auth, 9 Deno edge functions acting as a secure inference and orchestration layer, and timezone-aware push notifications so reminders land at the right moment wherever the user is. Roughly 20,000 lines of TypeScript in total.

OutputA fully featured product with the inference layer kept server-side and secure.

Live in TestFlight beta, structured for a growing team

Shipped to beta on TestFlight, where real users now run the daily loop against real data. The codebase and design system were structured for handoff from the start, and the team is currently expanding around it: a live iOS app in beta, plus a foundation another developer can pick up and extend.

Every release is also passed through a custom-made AI Security Agent, built to secure these applications and their development: it scans the code statically, probes the edge functions and the chat endpoint dynamically, and grades each weakness against the OWASP Web, Mobile and LLM Top 10. It detects around 90% of the potential vulnerabilities and hands back a fix for every one. The output lands twice: as Markdown beside the code, and as a Tailwind-styled HTML report with a sophisticated structure and design elements made for reading, from the metric cards and severity badges down to per-domain coverage meters and collapsible findings, so the state of a release is visible at a glance.

05

KenAI

Guided learning tracks that build job-ready skills through real output, not another course. Landing page and React web app shipped end to end; UX/UI designed in Figma and built alongside a remote back-end developer.

dev.app.eduken.ai → View the mockup →

A working backend with no way for anyone to use it

A working backend with no way for anyone to use it. No landing page, no interface, no path from visitor to paying subscriber. I read the backend as the source of truth (endpoints, auth, chat context, subscription logic) and sat with the founder to translate his concept into intended user outcomes. Then mapped the critical path end to end: land, sign up, 7-day trial, chat, plan selection, subscribe, plus every branch off it.

OutputA clear picture of what the system could do, and the flows that would expose it to real users.

Wireframes through to a validated Figma prototype

Wireframes for structure, then a visual system in Figma covering type, color, spacing and components, built into interactive prototypes the founder could click through. Pressure-testing flows in a frame is faster and cheaper than fixing them in code.

OutputHigh-fidelity designs and a validated prototype for both the landing page and the app.

A React and TypeScript front end shipped in vertical slices

Scaffolded a React and TypeScript codebase with maintainability as the priority, then shipped the landing page first to give the product a public face. From there, built the app in vertical slices: registration, AI chat with context, profile, trial, plan selection, subscription.

Then a visual generation layer for the tutor, because a wall of text is the hardest way to learn a process. Asked to “draw it”, the tutor answers with a diagram rendered inside the chat: each step a node, each move a labelled arrow, and alternative routes laid side by side, so turning 0.375 into 3/8 reads as two paths to the same answer rather than a paragraph. A plain-text version of the same path sits beneath it for screen readers and quick copying, and the diagram ends on a question, so the learner makes the next choice instead of just looking at it.

OutputA structured, scalable front end delivered feature by feature, and a tutor that can show a concept as well as explain it.

Wiring every interface to live server-side logic

The collaboration-heavy phase. Working remotely alongside the backend developer, I wired each interface to live server-side logic (auth tokens, chat context, trial countdown, subscription state), defining API contracts together where they were ambiguous. Then tested the unhappy paths: day 8 of a 7-day trial, declined cards, dropped connections mid-chat.

OutputA front end running on real data, with the edge cases closed.

Continuous delivery on Vercel, landing page and app live

Deployed on Vercel with GitHub-driven continuous delivery, so every change is versioned, previewed and released without ceremony: a live landing page and fully functional web app, plus a workflow where the next improvement ships in hours.

06

Evola - MagII B2B

An AI orchestrator inside corporate messengers that turns plain requests into finished operations. Landing page built end to end with design, code, SEO and a Bitrix CRM funnel, plus application mockups spanning sales, logistics, HR and IT use cases.

magii.io →

Getting the product out of the founder’s head

A product that existed almost entirely in the founder’s head. No landing page, no app mockups, no investor or client presentations, no diagrams explaining how the thing actually works. The first job was getting the vision into a shared form. Magii is a B2B AI assistant that acts as a single operational window for companies, letting employees handle CRM updates, HR requests and IT tickets directly through everyday messengers instead of switching between internal systems. I worked through the core use cases (sales, logistics, HR, IT support) and the mechanics behind them, because you can’t design an interface or write a pitch for a product nobody has articulated yet.

OutputA documented understanding of what the product does, who it serves and how it works, agreed across product, design and sales.

Diagrams that make a structural product visible

Turned the concept into visual explanation: schemes and diagrams showing how the assistant sits between employees and their existing systems. This step is often skipped, but for a product whose value is structural rather than visual, a clear diagram does more work than any amount of copy. It also gave the internal team one shared picture to build and sell from.

OutputVisual explanations of the product’s function, usable by engineering, design and sales alike.

Mockups turning each use case into a concrete interface

Designed the mockups for the Magii application, translating each core use case into a concrete interface concept the team could build from. The goal was to make the abstract operational promise tangible: this is what a logistics request looks like, this is what an HR flow looks like.

OutputInterface concepts that gave the build team a clear target and gave stakeholders something real to react to.

A landing page wired into the Bitrix CRM funnel

Developed the Magii landing page end to end, from visual design through technical implementation. I optimized the site for SEO and built the backend conversion funnel connecting the site’s lead forms directly to Bitrix CRM, so every inquiry is captured and routed without manual handling. A landing page that generates leads but drops them isn’t finished.

OutputA live, discoverable site with an automated path from visitor to qualified lead in the CRM.

Decks and 2-pagers the sales team pitches with

Created the visual assets carrying the product into the market: presentation decks and 2-pagers used in client meetings and pilot discussions. Same identity, same story, same diagrams as the site, so a prospect who finds the page and then sits in a meeting encounters one consistent product. The result is a complete set of materials the sales team uses in live client and pilot conversations.

07

Midwife

A pregnancy AI companion, now an iOS app. She answers a short set of questions in a chat, once, and gets a personalised plan for her trimester and her exact week that she can anytime refine in plain language and even take away as a PDF. Expo over a FastAPI backend.

Join the test → View the mockup →

What the app must do, and what it must never do

Two halves, decided together. What it must do: turn one short conversation into a plan for the trimester and the week she is actually in, covering nutrition, symptoms, her baby and the appointments due now, that she can change by asking, and derive her week, trimester and BMI rather than ask for them, because no one knows their own day count. And it belongs on a phone, which is where a plan for a week is actually read. What it must never do: diagnose, touch a medication, comment on her weight. Red flags bypass guidance for a contact-your-provider callout, in any week.

OutputA product definition in two halves: an intake reduced to what only she can answer, and safety rules that outrank the prompt.

A conversation instead of a form, and every card with a state

The intake is a chat rather than a form: it asks one thing at a time, accepts “5 foot 6” or “I’m 20 weeks” as answers, works out her week, trimester and BMI itself, and stops as soon as it has what it needs. The plan is then eleven cards she thumbs through, nutrition, symptoms, her baby with visuals, the visits to book, drawn on iOS 26’s own glass, across four native tabs, in both themes from one token file. It was sketched on paper, worked in Figma and Claude Design, and then prototyped in code, because eleven cards under a thumb can only be judged with a thumb.

The real-world complexity was designed for, not discovered later. A card can never render blank: a missing field gets a placeholder rather than a hole. A red flag is its own state, not a line in the chat: it bypasses the plan for a contact-your-provider callout that outranks the layout, in any week. The assistant answers in message cards, in a typeface and a tone chosen for someone reading at three in the morning, and the same plan exports as a formatted PDF that reads as a document she can hand to a partner or a midwife. Each decision was shared as a prototype before it was built, and TestFlight testers are now the ones deciding what changes next.

OutputEleven cards, four tabs, one token file for both themes, a safety state that outranks the layout, and a PDF that reads as a document.

A phone in TypeScript, a model graph in Python

Expo, React Native, React 19 and Zustand on the phone; a FastAPI backend behind it where every call to the model goes through one module and the key never reaches the device. Both plans come back as structured objects: the shape is a tool schema and the call is forced with tool_choice, so what arrives is already validated, with no JSON to parse, and each key is one card. Strict mode is off deliberately: it fills a blank field with a placeholder rather than leaving it out.

The weekly plan is a LangGraph state machine rather than a chain: search first, then a conditional edge that forces the schema once the results are in context. Streaming is reserved for the one thing still prose, the assistant, over SSE.

OutputRoughly 5,300 lines of TypeScript over 3,300 of Python: LangChain on gpt-5.6-luna, validated structured output throughout.

Tools outside the model, and an account

The week links a real article, so the model is never allowed to write a URL from memory: a hosted search is locked to one domain and the plan cites what came back. Changes happen in her own words: a routing tool turns “swap the lentils” into an edit of one card, rewritten against that card’s own schema. Accounts came with the phone: Supabase fronted by the same backend, so the anon key never ships in the binary, and row-level security picks the row.

OutputGrounded links, natural-language editing, and a plan kept in a single row that nobody else’s token can reach.

Current on her phone, and shipped from two places

Her copy is the one that lasts: the whole plan sits on the phone and is handed back to a restarted server under the same id, regenerating nothing. Her week is counted again from her dates every time she opens it, so what the calendar has moved past is fetched again, the trimester band with it. Any card can be double-tapped to sit above the chat about it.

Each build is checked by an AI Security Agent made for the purpose: a hybrid static and dynamic scanner, carefully crafted for securing these apps and their development, that reads the code, probes the live backend and the assistant endpoint, and grades every finding against the OWASP Web, Mobile and LLM Top 10. It detects around 90% of the potential vulnerabilities, each with a code fix and a proof attached. The findings are written out as Markdown and as an HTML report on Tailwind, given a sophisticated structure and design for a more appealing read: metric cards, severity badges, coverage meters per domain, and findings that fold away until opened, so the audit is something a team can actually look at.

The backend ships as a Docker image, the app builds through EAS, and every decision lives beside the code.

Let’s work together!

One idea is all you need. Dmitry handles design, code, security and product delivery: from 0 to 1.

Service