Студія
Програми, які працюють, поки ви зайняті справою.
- CRM і системи під задачу
- Автоматизація, боти та інтеграції
- Сайти й мобільні застосунки
- Обслуговування IT із фіксованою оплатою
Перша розмова безкоштовна. Твердий кошторис до початку робіт.
Студія програмування та майстерня електроніки · Коста-Адехе, Тенерифе
Робимо програми для бізнесу й ремонтуємо техніку, аж до пайки плати. Понад 15 років в IT, із них 4 роки тут, на Тенерифе.
Програми, які працюють, поки ви зайняті справою.
Перша розмова безкоштовна. Твердий кошторис до початку робіт.
Ваша техніка знову в строю.
Діагностика безкоштовна, якщо ремонтуємо ми (інакше 30 €). Гарантія 3 місяці.
Усе, що тут показано, ми спроєктували й написали самі, і все це працює.

Сайт знімальної студії в Лос-Анджелесі: бронювання з оплатою через Stripe і кабінет гостя.
19 майданчиків · 4 канали броней
Детальніше
Застосунок для гостей: бронювання на стрічці часу, сет за фото, вхід за Face ID.
iOS · Android
Детальніше
CRM студії: броні з усіх платформ, запити, завдання, гроші та ШІ-помічники.
43 таблиці · 836 автотестів
Детальніше
Застосунок для команди: день студії, push з кнопками, Live Activity і Face ID.
iOS · Android
Детальніше
CRM для агентств нерухомості, які продають, а потім керують об’єктом.
59 екранів · 7 мов
Детальніше



Інженерія
Уривки в тому вигляді, в якому вони лежать у репозиторії: форма заявки, підписання договорів, статуси ремонту і години роботи майстерні. Усе вирізане позначено «// …».
if (form.company) return json({ ok: true });
const name = String(form.name ?? '').trim().slice(0, 200);
const contact = String(form.contact ?? '').trim().slice(0, 200);
const about = String(form.about ?? '').trim().slice(0, MAX_LEN);
if (!name || !contact || !about || form.consent !== true) {
return json({ error: 'validation' }, 400);
}
if (env.TURNSTILE_SECRET) {
const ip = request.headers.get('cf-connecting-ip');
const ok = await verifyTurnstile(env.TURNSTILE_SECRET, form.turnstile, ip);
if (!ok) return json({ error: 'captcha' }, 400);
}Пастка для ботів і перевірка Turnstile: на пошту потрапляють заявки від людей, а спам відсіюється мовчки.
export async function sha256Hex(text) {
return toHex(await crypto.subtle.digest('SHA-256', enc.encode(text)));
}
// …
const now = new Date().toISOString();
await env.DB.prepare(
`update contracts
set status = 'signed', signed_at = ?, signer_name = ?, signer_image = ?,
signer_ip = ?, signer_ua = ?, signed_hash = ?,
signer_phone = ?, signer_address = ?
where id = ? and status <> 'signed'`,
)
.bind(
// …
await sha256Hex(row.body),
// …
)
.run();Фіксуємо час, IP, пристрій і SHA-256 тексту, який людина бачила під час підписання: підпис можна довести, а документ — не підмінити.
const status = ALL_STATUSES.includes(b.status) ? b.status : row.status;
const now = new Date().toISOString();
// …
if (status !== row.status || clean(b.comment, 500)) {
await addEvent(env, id, status, clean(b.comment, 500), now);
}
let mailed = false;
if (status === 'ready' && row.status !== 'ready') {
mailed = await mailOrder(env, 'ready', {
email: row.client_email,
lang: row.lang,
number: row.number,
device: row.device,
url: new URL(`/o/${id}`, SITE.url).href,
});
}Кожна зміна статусу записується в історію, яку клієнт бачить за своїм посиланням, а лист надходить один раз — коли ремонт готовий.
function canary(d) {
const f = new Intl.DateTimeFormat('en-CA', {
timeZone: 'Atlantic/Canary', year: 'numeric', month: '2-digit', day: '2-digit',
hour: '2-digit', minute: '2-digit', hourCycle: 'h23', weekday: 'short',
});
const p = Object.fromEntries(f.formatToParts(d).map((x) => [x.type, x.value]));
const dow = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 }[p.weekday];
return { date: `${p.year}-${p.month}-${p.day}`, dow, mins: Number(p.hour) * 60 + Number(p.minute) };
}
const toMins = (hhmm) => Number(hhmm.slice(0, 2)) * 60 + Number(hhmm.slice(3, 5));
const workday = (c) => (HOURS[c.dow] && !HOLIDAYS.has(c.date) ? HOURS[c.dow] : null);
export function shopStatus(now = new Date()) {
const c = canary(now);
const h = workday(c);
if (h && c.mins >= toMins(h[0]) && c.mins < toMins(h[1])) return { open: true, closes: h[1] };
// …
}Сайт сам знає, чи відчинена майстерня: час Тенерифе з переходом на літній і святами — з того самого джерела, що й дані для Google.
Лише те, на чому справді працюють HostBase, Hourgrid, Mansaria і цей сайт. Нічого «для солідності».
Уже знаєте, що потрібно? Позначте задачі, стек і формат роботи — заявка збереться сама.
Зібрати проєкт у конструкторіМайстерня
Назвемо орієнтовну ціну ще до того, як ви вийдете з дому.
Тверда ціна до початку робіт. Якщо ремонтувати невигідно, так і скажемо.
Кожен етап видно за посиланням, із фото до та після.
Гарантія на ремонт 3 місяці.
Студія
Перш ніж писати код, розбираємося, який процес з’їдає час або гроші. Іноді відповідь не в застосунку, і ми так і кажемо.
Не винаходимо заново вхід, оплату й сповіщення. Час витрачаємо на те, що є лише у вашого бізнесу.
Код, домен, хостинг і база належать вам. Можна перейти до іншої команди будь-коли.
Ця сторінка зроблена так само, як наші системи: легкою, швидкою й без стеження. Цифри виміряв ваш браузер під час завантаження.
Район Сан-Еухеніо. Якщо їдете здалеку, напишіть заздалегідь: перевіримо, що потрібна деталь на місці.
28.076 N · 16.733 W
Години роботи
Тенерифе ·