Грешный Котикsinnercode

Грешный Котик · full-stack разработчик · Python и TypeScript sinnercode · full-stack developer · Python and TypeScript

Бэкенд, фронтенд, интеграции и AI в одних руках Backend, frontend, integrations and AI in one pair of hands

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

I build web products end to end, from the database schema to production. Hand me a product from scratch, bring me onto one that's already live, or add me to your team.

Сбои продумываю заранее. Вебхук, пришедший дважды, два одновременных запроса, воркер, упавший посреди задачи: в проектах ниже всё это обработано и проверено тестами.

I plan for failure up front. A webhook delivered twice, two requests at the same moment, a worker dying mid-job: the projects below handle all of it, and tests check that they do.

в коммерческой разработке с 201910 открытых проектовтесты и CI в каждомберу новые проекты

commercial work since 201910 open projectstests and CI in eachtaking on new projects

Pulse: график трафика и живая лента посетителей
Pulse — аналитика сайтовPulse, web analytics with a live feed открыть демо ↗open the demo ↗

ФорматыWays to work

Как можно со мной работатьHow we can work together

Цену называю после разговора о задаче: за проект — фиксированную, за долгую работу — ставку в час или в месяц.

I quote after we talk the task through: a fixed price for a project, an hourly or monthly rate for longer work.

  • Продукт с нуляA product from scratch

    MVP, SaaS, CRM, личный кабинет или внутренняя система. Проектирую данные и API, пишу бэкенд и интерфейс, настраиваю деплой и CI.

    An MVP, a SaaS, a CRM, a customer portal or an internal system. I design the data model and API, write the backend and the UI, and set up deployment and CI.

    фиксированная цена, оплата по этапамfixed price, paid by milestone

  • Разработчик в вашу командуA developer on your team

    Part-time или full-time по контракту. Работаю в вашем репозитории и трекере, беру задачи из бэклога, код проходит ваше ревью.

    Part-time or full-time on contract. I work in your repository and tracker, take tickets from the backlog, and my code goes through your review.

    ставка в час или в месяцhourly or monthly rate

  • Развитие продуктаOngoing development

    Продукт уже работает, и его нужно развивать: новые функции, интеграции, ускорение, исправление ошибок.

    The product is live and needs to keep moving: new features, integrations, speed-ups, bug fixes.

    почасово или помесячноhourly or monthly

  • Аудит и спасение проектаAudit and rescue

    Проект застрял или остался без разработчика. Разбираю код, говорю, что сломано и что опасно, потом чиню, покрываю тестами и довожу до релиза.

    The project is stuck or its developer is gone. I go through the code, tell you what's broken and what's risky, then fix it, add tests and get it to release.

    сначала аудит, потом оценкаaudit first, then an estimate

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

Smaller jobs are welcome too: a bot, a CRM integration, a scraper, a report or a landing page. See the smaller projects for examples.

Что умеюSkills

Что умею и где это видно в кодеWhat I do, and where to see it in the code

У каждой строки есть ссылка на конкретный файл или демо, где это сделано.

Every row links to the exact file or demo where it's done.

ПроектыProjects

Проекты, в которые можно заглянутьProjects you can look inside

Код заказчиков остаётся у них, поэтому здесь открытые проекты на выдуманных данных. Это не макеты: у каждого есть демо, которое работает прямо в браузере, тесты и CI, а весь код лежит на GitHub.

Client code stays with clients, so these are open projects on made-up data. They aren't mockups: each one has a demo that runs right in your browser, tests and CI, and all the code is on GitHub.

FlowDesk: канбан сделок
CRM, full-stackCRM, full-stack97 тестов97 tests

FlowDesk

CRM для отдела продаж: канбан сделок с перетаскиванием, контакты, заметки и история по сделке, дашборд с воронкой и прогнозом. Менеджер двигает и правит только свои сделки, админ — все.

A CRM for a sales team: a drag-and-drop deals board, contacts, notes and history for each deal, a dashboard with the funnel and a forecast. Managers move and edit only their own deals; admins can edit all of them.

Под капотомRefresh-токены ротируются, а повторно использованный токен отзывает всю сессию. Гонку двух одновременных refresh-запросов закрывает условный updateMany в транзакции.

Under the hoodRefresh tokens rotate, and a reused token revokes the whole session. A conditional updateMany inside a transaction settles the race between two concurrent refreshes.

Next.jsFastifyPrismaPostgreSQLTanStack Querydnd-kit

Вход в демо уже заполнен, пароль вводить не нужно.

The demo login is prefilled, so there's no password to type.

Pulse: график трафика и живая лента посетителей
Аналитика, SaaSAnalytics, SaaS97 тестов97 tests

Pulse

Веб-аналитика без cookies и проверка доступности сайтов в одном дашборде. Посетители появляются в живой ленте, а если сайт упал, это видно на отдельной странице.

Cookieless web analytics and uptime checks in one dashboard. Visitors show up in a live feed, and if a site goes down you see it on a separate page.

Под капотомПосетителей в каждой строке статистики считает HyperLogLog: до 512 хэшей это точное множество, дальше 2048 регистров с ошибкой около 2,3%. Трекер для сайта весит 843 байта, 560 в gzip.

Under the hoodEach stats row counts visitors with HyperLogLog: an exact set up to 512 hashes, then 2048 registers with about 2.3% error. The site tracker is 843 bytes, 560 gzipped.

TypeScriptFastifynode:sqliteWebSocketReact

Дашборд Relay: события, доставки и повторы
ИнтеграцииIntegrations155 тестов155 tests

Relay

Заявки из Tilda, amoCRM и Bitrix24 расходятся в Telegram, Google Sheets, amoCRM и на почту. Если получатель не ответил, доставка повторяется с растущей паузой, а то, что так и не дошло, можно отправить ещё раз из отдельного списка.

Leads from Tilda, amoCRM and Bitrix24 go out to Telegram, Google Sheets, amoCRM and e-mail. If a recipient doesn't answer, delivery is retried with growing pauses, and anything that never got through can be resent from a separate list.

Под капотомОчередь своя, на sorted sets в Redis. Взятая задача получает дедлайн 120 секунд, и если воркер упадёт, после дедлайна она вернётся в очередь.

Under the hoodThe queue is custom, built on Redis sorted sets. A job a worker takes gets a 120-second deadline, and if the worker dies, the job goes back to the queue once the deadline passes.

PythonFastAPIRedisSQLiteReact

DocMind: ответ со сносками на источники
AI, RAG127 тестов127 tests

DocMind

Ассистент, который отвечает по вашим документам: PDF, DOCX, страницам сайта. Ответ идёт потоком со сносками, клик по сноске открывает фрагмент источника. Есть веб-интерфейс и Telegram-бот.

An assistant that answers from your documents: PDF, DOCX, web pages. The answer streams in with citations, and clicking one opens the source passage. It has a web UI and a Telegram bot.

Под капотомИсточники приходят по SSE раньше первого токена ответа, поэтому, когда в тексте появляется сноска [n], её карточка уже на экране.

Under the hoodSources arrive over SSE before the first answer token, so when a [n] citation appears in the text, its card is already on screen.

PythonFastAPIpgvectorClaude / OpenAI APIReact

В демо нет LLM: ответ собирается из найденных в документах предложений.

The demo has no LLM: answers are put together from sentences found in the documents.

Zernolist: каталог, карточка товара и оплата в Telegram Stars
Telegram Mini App143 теста143 tests

Zernolist

Магазин кофе и чая внутри Telegram: каталог с поиском, промокоды, курьер или самовывоз, оплата в Telegram Stars или при получении. Заказы приходят админу в бот, статус он меняет кнопками под уведомлением.

A coffee and tea shop inside Telegram: a searchable catalog, promo codes, courier or pickup, payment with Telegram Stars or on receipt. Orders reach the admin in the bot, and the status changes with buttons under the notification.

Под капотомЦену каждого заказа сервер считает сам по каталогу, поэтому подменить её из браузера не выйдет. Если Telegram пришлёт уведомление об оплате дважды, заказ второй раз не проведётся.

Under the hoodThe server prices every order from the catalog itself, so nobody can change the price in the browser. If Telegram sends the same payment update twice, the order goes through only once.

ReactViteaiogram 3FastAPISQLAlchemy

Проекты поменьшеSmaller projects

  • Лендинг с калькуляторомLanding page with a calculator

    Смета дома по строкам, ссылка на расчёт, заявка в Telegram или на почту.

    A house estimate line by line, a shareable link to the calculation, leads to Telegram or e-mail.

    демо ↗demo ↗кодcode
  • Бот для заявокLead bot

    Анкета в 4 шага, карточка заявки менеджеру с кнопками статусов, выгрузка в CSV, рассылка.

    A 4-step form, a lead card for managers with status buttons, CSV export, broadcasts.

    кодcode
  • ПарсерScraper

    Ограничение запросов в секунду, повторы, кэш на диске; выгрузка в Excel, CSV, JSON и Google Sheets.

    A requests-per-second limit, retries, a disk cache; exports to Excel, CSV, JSON and Google Sheets.

    кодcode
  • Отчёт в ExcelExcel report

    Книги Excel из сырых CSV: дашборд с фильтрами и счёт с маржой, все итоги считают формулы.

    Excel workbooks built from raw CSVs: a dashboard with filters and an invoice with margin, every total is a formula.

    кодcode
  • Сценарии для n8nn8n workflows

    Заметки со встреч в Notion через Claude, ответы по документам на локальной LLM, утренняя сводка календарей. Проверены на тестовых данных, с живыми аккаунтами не запускались.

    Meeting notes to Notion through Claude, answers from documents on a local LLM, a morning calendar digest. Tested on sample data, not run against live accounts.

    кодcode

Как работаюProcess

Как проходит работаHow a project runs

  1. 01

    РазговорFirst talk

    Обсуждаем задачу, сроки и формат работы. Если код уже есть, смотрю его до оценки.

    We go over the task, the timeline and the format. If there's existing code, I look at it before estimating.

  2. 02

    ОценкаEstimate

    За проект — объём, срок и фиксированная цена, за долгую работу — ставка. Цена не меняется, пока не меняется объём.

    For a project: scope, timeline and a fixed price. For longer work: a rate. The price holds unless the scope changes.

  3. 03

    ЭтапыMilestones

    Большую задачу делю на этапы. Каждый заканчивается рабочей версией, которую можно открыть и проверить.

    Big jobs get split into milestones. Each one ends with a working build you can open and check.

  4. 04

    Код у васYour code

    С первого дня пишу в ваш репозиторий, с тестами и CI. Проект не привязан ко мне.

    From day one I commit to your repository, with tests and CI. The project isn't tied to me.

  5. 05

    ЗапускLaunch

    Деплой, README и инструкция по запуску. Дальше могу остаться на развитии и поддержке.

    Deployment, a README and run instructions. After that I can stay on for support and new features.

ВопросыFAQ

Что обычно спрашиваютWhat people usually ask

Не нашли ответ? Спросите напрямую в Telegram, там я отвечаю быстрее всего.

Didn't find your answer? Ask me on Telegram, that's where I reply fastest.

Спросить в Telegram ↗Ask on Telegram ↗
Беретесь за большие проекты?Do you take on large projects?

Да. Могу вести продукт один, от схемы базы до продакшена, или работать частью вашей команды. Большой проект делим на этапы, и каждый сдаётся рабочей версией, так что месяцами ждать результата не придётся.

Yes. I can build a product on my own, from the database schema to production, or work as part of your team. A big project is split into milestones, each delivered as a working build, so you never wait months to see results.

Сколько это стоит?How much does it cost?

Зависит от объёма и формата. Проект оцениваю после разговора и фиксирую цену до старта. Для долгой работы или работы в команде называю ставку в час или в месяц.

It depends on the scope and the format. I estimate a project after we talk and fix the price before we start. For longer work or a spot on your team, I quote an hourly or monthly rate.

Как платить?How does payment work?

Проект с фиксированной ценой: 50% на старте и 50% после приёмки, большой — по этапам. Почасовая и помесячная работа оплачивается по ставке, периодичность договорим на старте.

A fixed-price project is 50% upfront and 50% on acceptance; a large one is paid by milestone. Hourly and monthly work is billed at the rate, on a schedule we agree at the start.

Можете разобраться в чужом коде?Can you take over someone else's code?

Да, это отдельный формат. Сначала читаю код и говорю, что в нём сломано и что опасно, потом оцениваю, сколько займёт исправление или доработка.

Yes, that's a format of its own. I read the code first and tell you what's broken and what's risky, then estimate the fix or the rest of the work.

Работаете с зарубежными заказчиками?Can we work in English?

Да. Общаться можем на русском или английском, у этой страницы и у README всех проектов есть английская версия.

Yes. We can talk in English or Russian, and this page and every project README have English versions.

Почему в портфолио демо, а не проекты клиентов?Why demos and not client projects?

Клиентский код я не публикую: он принадлежит заказчикам. Открытые проекты сделаны на выдуманных данных, чтобы их можно было открыть, пощёлкать и почитать код.

I don't publish client code; it belongs to the clients. The open projects run on made-up data so you can open them, click around and read the code.

Как будем общаться?How do we keep in touch?

Первый разговор — в Telegram. Если работаю в вашей команде, подключаюсь к вашему мессенджеру и трекеру задач.

The first conversation is on Telegram. If I join your team, I use your messenger and your task tracker.

Расскажите о проектеTell me about your project

Готовое ТЗ не нужно: напишите, что строите, что уже есть и к какому сроку. Отвечу с вопросами и следующим шагом.

You don't need a written spec: tell me what you're building, what exists already and when you need it. I'll reply with questions and a next step.

Telegram · @sinnercode GitHub · sinnercode228
Написать в TelegramMessage me on Telegram