Предыстория
Вообще, я — ПМ с опытом в коде. А еще мы с мужем делаем сами ремонт в новой квартире, и в процессе я случайно обнаружила «золотую жилу» неэффективности.
Искала металл и столкнулась с тем, что у большинства компаний, занимающихся прокатом, сайты застряли в начале 2000-х. Каталоги неактуальны: то, что лежит в корзине, «не оформить», заявки висят вечно, на звонки отвечают через раз. А если ты не покупаешь металл тоннами, то для них ты вообще не клиент.
Короче, с продажами в этой нише всё, мягко говоря, не очень.
В этот момент во мне проснулся ПМ, который привык оптимизировать процессы, и инженер, которому стало обидно за плохой UX. Я поняла: либо я сейчас найду металл, либо я напишу инструмент, который поможет таким компаниям перестать терять заказы.
В общем, вот во что это вылилось...
Вводная
Последнее время наблюдаю картину, как наша компания проигрывает конкурсы по заявкам на новые проекты, даже с самыми ужатыми оценками. Отсюда вытекает следствие, что конкуренты вовсю используют вайбкодинг, для того, чтобы сократить время и стоимость работ. Ну и клиенты, естественно, выбирают тех, кто просит дешевле.
Эта ситуация привела к тому, что тему вайбкодинга я решила поизучать.
Начало
Попался очень крутой вебинар от Зерокодер с Кириллом Пшинником про Claude Code, где он вживую показывал запуск проектов с использованием нейронки, с полного нуля. Впечатлило то, что за 40 минут мы создали сразу несколько вещей:
лендинг (дизайн и контент генерились на лету);
блог по умному дому и слаботочке (ИИ сам собирал информацию и писал статьи);
бот в Telegram по установке Claude Code.
а потом Кирилла понесло, и он сделал еще несколько проектов)))
Еще более впечатлило, что нейронка сама деплоила все, куда попросишь (доступы были даны).
Короче, аналитики + программисты + девопс - все в одном лице. Ну это уже просто бомба!
Продолжение
Кирилл звал учиться, но что-то я не зашла, хотя продажи у них поставлены на ура. Меня догоняли звонками, сообщениями, подарками и т.п. Не догнали). Наверное, потому что я не люблю впн, перспектива искать возможности оплаты, делать спец. карту, включать/выключать впн меня не вдохновляли.
Решила попробовать сама поизучать.
Русские нейронки vs Gemini
Ну я патриот) Зерокодер как раз прислали подборки популярных российских нейронок, и взяла я ГигаЧат
Тут как раз подоспела задача - нужно было разобрать с нескольких фото список собственников для прохода по квартирам, раздачи бланков для голосования и отметок, кому дали, кто вернул.
Дала задачу ГигаЧату. Он начал меня спрашивать вокруг да около, написал несуразицу про содержимое таблиц: вообще непонятно, откуда он взял, что там есть медицинские показатели… Ну я спросила его напрямую, умеет ли он распознавать текст с изображений. На что он мне честно ответил:

Я опечалилась, вспоминая, как Claude и распознавал, и генерил, и анализировал, и агрегировал и еще, и еще…
Но вспомнила, что у меня работает Gemini. Как именно — загадка (муж что-то настроил с DNS).
Пошла к Gemini. Там тоже начались пляски с каким-то выдуманными данными, начала спрашивать про распознавание, ответ был не такой удручающий: типа спец. навык OCR не подключен, но я умею читать по фото. Тут я стала ему сбрасывать фото по одной, и он начал считывать. Пришлось покрутиться с промтами, чтобы добиться желаемого, но в итоге он все распознал и собрал в один файл.
Тут уже как-то веселее.
Скрипт на Python для синхронизации каталога на сайте с наличием товаров в ексель.
Тут я решила спросить Gemini, как у него с программированием. Оказалось - все хорошо, даже сравнил себя с Claude:

Gemini поддержал меня в идее помочь нашей металлобработке с актуализацией товаров в каталоге и предложил техническое решение.
Договорились, что файл будет лежать в Google Sheets, бэкенд будет на Python, фронтенд - легкая веб-страница на Streamlit.
Каждые 2 часа данные будут обновляться специальной джобой.

Поставила себе Python, настроила в Google Cloud Console проект и Service Account.
Создала файлик app.py, куда вставила код от Gemini, настроила доступ к гугл-таблице с данными для спец. емейл из Google Service Account.
Поотлаживала, чуть поправила скрипт, т.к. меняла файл, и через пару часов готовый прототип был запущен на локалхосте:

Получила свою дозу дофамина от того, что результат есть, и быстро.
Буду дружить с Gemini )))
А вот и код на Python:
import streamlit as st import pandas as pd import gspread from google.oauth2.service_account import Credentials # --- НАСТРОЙКИ --- SCOPES = [ 'https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive' ] creds = Credentials.from_service_account_file('service_account.json', scopes=SCOPES) gc = gspread.authorize(creds) SPREADSHEET_ID = '*******' # --- ФУНКЦИЯ ЗАГРУЗКИ --- @st.cache_data(ttl=7200) def get_data(sheet_name): sh = gc.open_by_key(SPREADSHEET_ID) ws = sh.worksheet(sheet_name) rows = ws.get_all_values() # Заголовки начинаются с 12-й строки (индекс 11) header_row_index = 11 df = pd.DataFrame(rows[header_row_index+1:], columns=rows[header_row_index]) # Очистка от мусора df = df.loc[:, ~df.columns.duplicated()] df = df.loc[:, df.columns != ''] df = df.dropna(how='all') return df # --- ИНТЕРФЕЙС --- st.title("Каталог продукции: Медная шина") df = get_data("Шина") st.dataframe(df, use_container_width=True)
