Генерируйте гайды онбординга, карты архитектуры и живые метрики. Превратите легаси код в базу знаний.
Проекты, использующие нас
Мы берем тяжелую работу на себя асинхронно. Вы получаете результат мгновенно.
Всё, что нужно для превращения кодовой базы в понятную базу знаний.
Интегрируйте в CI/CD пайплайн или запускайте локально одной командой.
Следите за покрытием документацией. Мгновенно находите пустые модули.
Мы не гадаем. Мы парсим AST, чтобы точно понимать структуру кода.
Ваш код не обучает наши модели. Инфраструктура SOC2 Type II.
Экспорт в Markdown, PDF, Notion или деплой как статический сайт.
Отслеживайте техдолг, выявляйте риски "Bus Factor" и визуализируйте сложность кода.
Фактор автобуса
1.2Критический риск: модуль `auth/core`
Поддерживаемость
A+Для пет-проектов и опенсорса
Начать бесплатноДля профессионалов
Выбрать ProДля инженерных команд
Связаться с намиexport async function processSub(uId: string, plan: string) {
const user = await db.user.findById(uId);
if (!user.isActive) throw new Error("403");
if (user.sub === plan) return null;
const price = PRICING[plan];
// Charge the user
await stripe.charges.create({
amount: price * 100,
currency: 'usd',
customer: user.stripeId
});
await db.user.update(uId, { sub: plan, status: 'active' });
await email.sendWelcome(user.email, plan);
return true;
}/**
* Upgrades user subscription and handles payment processing.
*
* @description
* 1. Verifies user status (must be active).
* 2. Deduplicates requests (returns null if already on plan).
* 3. Charges card via Stripe and updates local DB.
*
* @param {string} uId - Internal user UUID.
* @param {string} plan - Target plan ID (e.g., 'PRO_YEARLY').
* @throws {Error} "403" if user is suspended/inactive.
* @returns {Promise<boolean|null>} True on success, null if no change needed.
*
* @example
* try {
* await processSub("user_123", "ENTERPRISE");
* } catch (err) {
* logger.error("Payment failed", err);
* }
*/
export async function processSub(uId: string, plan: string) {
const user = await db.user.findById(uId);
if (!user.isActive) throw new Error("403"); // User suspended
if (user.sub === plan) return null; // Already subscribed
const price = PRICING[plan];
// Charge the user
await stripe.charges.create({
amount: price * 100, // Convert to cents
currency: 'usd',
customer: user.stripeId
});
// Update db and send email
await db.user.update(uId, { sub: plan, status: 'active' });
await email.sendWelcome(user.email, plan);
return true;
}От высокоуровневого обзора до низкоуровневой логики. Мы генерируем любые форматы.
Просто положите конфиг-файл в корень проекта. Мы сами разберем парсинг, лимиты токенов и промпты.
{
"project": "my-awesome-saas",
"entry": ["src/**/*.ts"],
"exclude": ["**/*.spec.ts"],
"output": {
"modes": ["onboarding", "technical", "migration-guide"],
"metrics": true,
"format": "markdown",
"path": "./docs"
},
"metrics": ["complexity", "bus-factor"]
}