Исматов Улмасжон на фоне кода и веб-интерфейсов

Всем привет, я

Прокрутите вниз
01

Обо мне

Исматов Улмасжон за рабочим столом, на мониторах код

Мне всегда нравилось создавать сложные вещи с множеством деталей. У меня хорошее чувство дизайна, поэтому мне важно не только то, как работает интерфейс, но и то, как он выглядит. 

Я люблю программирование. К задачам подхожу системно: сначала анализирую, затем выбираю самое простое и надёжное решение. Умею вести несколько задач одновременно и довожу начатое до конца. 

Люблю учиться самостоятельно и с удовольствием пробую новые технологии. Мне нравится работать в команде, и у меня есть чувство юмора. 

Исматов Улмасжон с ноутбуком: от кода до готового продукта

Я развиваюсь как full-stack разработчик: на фронтенде использую React и TypeScript, на бэкенде — FastAPI и PostgreSQL. Также создаю Telegram-ботов и AI-интеграции через LLM API. Хочу работать над реальными продуктами в сильной команде. 

Я развиваюсь каждый день и добавляю в свой стек новые языки, фреймворки и инструменты. Всегда открыт к новым проектам, сотрудничеству и встречам. 

2+
Лет опыта
10+
Проекты
21
Технологии
100%
Преданность
02

Услуги

Чем могу помочь

Веду проект от идеи до запуска: интерфейс, бэкенд, база данных и размещение на сервере.

  • Создание Telegram-ботов

    Боты, которые принимают заказы, отвечают клиентам или автоматизируют внутреннюю работу. При необходимости сдаю вместе с базой данных и админ-панелью.

  • Создание сайтов и веб-приложений

    От лендинга до сложного веб-приложения. Делаю на React и TypeScript быстрые сайты, удобные и на телефоне.

  • Админ-панели и системы управления

    Панели с ролями, чтобы управлять заказами, сотрудниками и отчётами из одного места: со статистикой, графиками и экспортом в Excel/PDF.

  • Telegram Mini App

    Полноценное приложение внутри Telegram: пользователю не нужно ничего устанавливать и регистрироваться, вход — через аккаунт Telegram.

  • AI-интеграция (LLM API)

    Добавлю искусственный интеллект в ваш бот или сайт: генерация текстов и тестовых вопросов, помощник, который отвечает на вопросы пользователей.

  • Работаю удалённо — в Бухаре и по всему Узбекистану.

    Обсудить проект
03

Навыки

Навыки Full-Stack разработчика

04

Проекты

Мои последние работы

Реальные проекты, сделанные для заказчиков: админ-панели, Telegram Mini Apps, AI-боты и лендинги. Имена и цифры на скриншотах — демонстрационные.

Админ-панель · Веб-приложение

Система управления грузоперевозками

Система управления рейсами для транспортной компании. Операторы добавляют рейсы, администратор проверяет их и подтверждает или отклоняет.

  • Роли администратора и оператора с разными правами
  • Подтверждение рейсов и цветные статусы
  • Отчёты в Excel и PDF (с кириллическими и узбекскими шрифтами)
  • Двуязычный интерфейс: узбекский и русский
ReactTypeScriptFastAPIMySQLDocker
Telegram Mini App · Админ-панель

Система учёта посещаемости и расчёта зарплаты

Сотрудники отмечают приход и уход через Telegram Mini App, а система сама считает штрафы за опоздания и зарплату.

  • Отметка через Face ID (с проверкой liveness) и геолокацию
  • Мониторинг по филиалам в реальном времени: радиус, опоздания, связь
  • Автоматический расчёт штрафов за опоздания и зарплаты
  • Панель администратора и бухгалтера, экспорт в Excel/PDF
ReactTypeScriptFastAPIPostgreSQLaiogramDeepFaceMediaPipe
Telegram-бот · Mini App

AI Quiz Bot

Telegram-бот и Mini App, которые создают тестовые вопросы с помощью AI. Пользователь проходит тесты и набирает XP и уровни.

  • Генерация вопросов через OpenRouter (LLM API)
  • Уровни, XP и рейтинг
  • Карточки и AI-помощник
  • Полноценный интерфейс Mini App прямо в боте
PythonaiogramPostgreSQLRedisOpenRouter
Лендинг · Веб-сайт

Mizan Agency

Лендинг для маркетингового агентства. Сайт представляет услуги агентства: таргетированную рекламу, SMM и лидогенерацию.

  • Презентация услуг: таргетированная реклама, SMM и лидогенерация
  • Разделы услуг, портфолио и цен
  • Кнопки быстрой связи по телефону и в Telegram
  • Адаптивный дизайн для всех экранов
HTMLCSSJavaScript
05

Код

Креативное кодирование

Интерактивная анимация частиц на canvas. Смотрите, как код оживает с визуализацией в реальном времени.

Живая Canvas-анимация
ParticleCanvas.tsx
01import { useRef, useEffect } from 'react';
02
03interface Point {
04 x: number;
05 y: number;
06 vx: number;
07 vy: number;
08}
09
10export function ParticleCanvas() {
11 const canvasRef = useRef<HTMLCanvasElement>(null);
12 const pointsRef = useRef<Point[]>([]);
13 const animationRef = useRef<number>();
14
15 useEffect(() => {
16 const canvas = canvasRef.current;
17 if (!canvas) return;
18
19 const context = canvas.getContext('2d');
20 if (!context) return;
21
22 let width = 0;
23 let height = 0;
24 const SPEED = 0.5;
25 const DIST = 150;
26 const NUMBER = 60;
27 let isVisible = false;
28
29 const resizeCanvas = () => {
30 const wrapper = canvas.parentElement;
31 if (!wrapper) return;
32 width = canvas.width = wrapper.offsetWidth;
33 height = canvas.height = wrapper.offsetHeight;
34
35 pointsRef.current = [];
36 for (let i = 0; i < NUMBER; i++) {
37 pointsRef.current.push({
38 x: Math.random() * width,
39 y: Math.random() * height,
40 vx: (Math.random() - 0.5) * SPEED,
41 vy: (Math.random() - 0.5) * SPEED,
42 });
43 }
44 };
45
46 resizeCanvas();
47
48 const getDist = (a: Point, b: Point) => {
49 const dx = a.x - b.x;
50 const dy = a.y - b.y;
51 return Math.sqrt(dx * dx + dy * dy);
52 };
53
54 const drawLines = () => {
55 const points = pointsRef.current;
56 for (let i = 0; i < points.length - 1; i++) {
57 for (let j = i + 1; j < points.length; j++) {
58 const dist = getDist(points[i], points[j]);
59 if (dist <= DIST) {
60 const alpha = 1 - dist / DIST;
61 context.strokeStyle = `hsla(177, 100%, 37%, ${alpha})`;
62 context.lineWidth = Math.pow(1 - dist / DIST, 1.5) * 2;
63 context.beginPath();
64 context.moveTo(points[i].x, points[i].y);
65 context.lineTo(points[j].x, points[j].y);
66 context.stroke();
67 }
68 }
69 }
70 };
71
72 const drawPoints = () => {
73 const points = pointsRef.current;
74 for (const point of points) {
75 context.beginPath();
76 context.arc(point.x, point.y, 2, 0, Math.PI * 2);
77 context.fillStyle = 'hsl(177, 100%, 47%)';
78 context.fill();
79 }
80 };
81
82 const updatePoints = () => {
83 const points = pointsRef.current;
84 for (const point of points) {
85 point.x += point.vx;
86 point.y += point.vy;
87
88 if (point.x < 0 || point.x > width) point.vx *= -1;
89 if (point.y < 0 || point.y > height) point.vy *= -1;
90 }
91 };
92
93 const drawFrame = () => {
94 context.clearRect(0, 0, width, height);
95 drawLines();
96 drawPoints();
97 };
98
99 // Respect "reduce motion": draw one static frame instead of animating.
100 if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
101 const redraw = () => {
102 resizeCanvas();
103 drawFrame();
104 };
105 drawFrame();
106 window.addEventListener('resize', redraw);
107 return () => window.removeEventListener('resize', redraw);
108 }
109
110 window.addEventListener('resize', resizeCanvas);
111
112 const animate = () => {
113 if (!isVisible) return;
114 drawFrame();
115 updatePoints();
116 animationRef.current = requestAnimationFrame(animate);
117 };
118
119 const observer = new IntersectionObserver(
120 ([entry]) => {
121 isVisible = entry.isIntersecting;
122 if (isVisible) {
123 animationRef.current = requestAnimationFrame(animate);
124 } else if (animationRef.current) {
125 cancelAnimationFrame(animationRef.current);
126 }
127 },
128 { threshold: 0 },
129 );
130
131 observer.observe(canvas);
132
133 return () => {
134 observer.disconnect();
135 window.removeEventListener('resize', resizeCanvas);
136 if (animationRef.current) {
137 cancelAnimationFrame(animationRef.current);
138 }
139 };
140 }, []);
141
142 return <canvas ref={canvasRef} className="absolute inset-0 w-full h-full" />;
143}
144
145export default ParticleCanvas;
06

Контакт

Оставьте мне сообщение...

Имя field
Email field