Проекти Vrachka.eu

Vrachka.eu

AI астрология платформа с персонализирани хороскопи

Собствен продукт
Архивен кадър · без потвърдена дата

Vrachka.eu

Архивен кадър · без потвърдена дата

Защо го създаваме.

Vrachka.eu е собствен продукт на Level 8 за астрологично съдържание, хороскопи, натални карти и таро.

Описаната разработка съчетава потребителски профили, AI съдържание, астрономически изчисления и платени функции в общо приложение.

Техническата част по-долу е запазено авторско описание на по-ранна реализация. Тя не удостоверява текущата конфигурация, работата на плащанията или точността на изчисленията.

Как е подредено решението

Архивното описание включва AI интерпретации, астрономическо ядро, потребителски профили и връзка с платежна система.

Техническите примери показват подходите за избор на AI модел, фонова обработка, пренасочвания и обработка на платежни събития. Те са запазени като история на проекта.

Текущият публичен изглед не е потвърден. Използваме архивните снимки и не представяме броячи или частни бизнес данни като измерени резултати.

  • Хороскопи и таро в архивния интерфейс
  • Представяне на натални карти
  • Описани потребителски профили и история
  • Описани плащания и абонаментни планове
  • Описани задачи за периодично AI съдържание
  • Архивни изгледи за компютър и телефон

Няколко вида съдържание в едно приложение.

Поглед през задачата на посетителя.

  1. 1

    Избирате тема

    Архивният интерфейс обединява хороскопи и таро.

  2. 2

    Продължавате към лична информация

    Авторското описание включва натални карти и потребителски профили.

  3. 3

    Намирате историята

    Запазената реализация описва лична история и периодично съдържание.

Vrachka.eu: реален мобилен кадър
Същата идея.
Друг екран.
Показваме архивни изгледи на продукта. Текущата конфигурация не се удостоверява с тези кадри.

Какво можете да проверите.

Снимките показват по-ранен интерфейс; точната дата на заснемането им не е документирана. За активни потребители, конверсии, приходи и производителност няма приложен датиран отчет, затова тези числа не се публикуват като резултати.

Материали към проекта

Архивен кадър · без потвърдена дата

Източник и обхват

Показваме архивни снимки без потвърдена дата на заснемане. Текущият изглед, плащанията и данните за използване не са потвърдени.

Next.js · TypeScript · OpenAI API · PostgreSQL · Stripe · Vercel

Проверете публичната версия

Още от интерфейса.

Архив: хороскоп. Датата на заснемане не е потвърдена.

Архивен кадър · без потвърдена дата

Vrachka.eu

Архивен кадър · без потвърдена дата

Техническо изпълнение и решения

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

В архивния публичен интерфейс

Хороскопи

Представени натални карти

Карти

В архивната навигация

Таро

Архитектура на проекта

Архивно авторско описание на архитектурата. Представя общо приложение за съдържание, потребителски профили, AI инструменти, астрономически изчисления и платени функции. Схемата и технологиите по-долу описват тази по-ранна реализация; актуалната инфраструктура не е проверена.

Схемата продължава надясно. Превъртете хоризонтално, за да видите всички системи. С клавиатура: изберете схемата с Tab и използвайте стрелките.

ПотребителИнтерфейсСървърБаза данниВъншни услугиHTTPSезик + authserver fetchизчисленияAI заявкаcheckoutwebhookemaildurablebatchПотребител (BG / EN)Потребител (BG / EN)Edge middlewareEdge middlewareNext.js 16 приложениеNext.js 16 приложениеSupabase (DB + Auth)Supabase (DB + Auth)AI gatewayAI gatewayStripe (плащания)Stripe (плащания)Resend (email)Resend (email)Астрономическо ядроАстрономическо ядроScheduled jobsScheduled jobsDurable workflowsDurable workflows
  1. Описан поток за регистрация: потвърждение по имейл, влизане и проверки за достъп в middleware.
  2. Описан поток за натална карта: данни от профила, изчисляване на планетни позиции, AI интерпретация и запазване в историята.
  3. Описан платежен поток: валидация, Stripe Checkout, webhook, запис на покупката и квитанция. Завършването на реално плащане не е проверено тук.
  4. Описана фонова обработка: периодична задача стартира workflow с отделни стъпки за различните зодии.
  5. Описани пренасочвания: статични правила и записи от админ панела, с временен кеш в паметта.

Технически избори

Кой AI да задвижва съдържанието?

Избрано
AI gateway с три модела в каскада
Разгледани алтернативи
Директна връзка само с един доставчик, Single-model решение
Причина
В архивното описание общ AI gateway позволява смяна на доставчика без промяна на потребителската функция. Предвидени са основен и резервни модели; това описва подхода, а не измерена наличност на услугата.
Компромис
Изборът на модели и разходът за заявки изискват периодичен преглед. Текущата конфигурация не е проверена.

Къде да се изпълняват астрономическите изчисления?

Избрано
Вградено астрономическо ядро в същото приложение
Разгледани алтернативи
Отделен сървър за астрономически изчисления, Изцяло JavaScript реализация
Причина
Архивната реализация поставя изчисленията в същото приложение, за да намали отделните услуги и мрежовите заявки между тях.
Компромис
Файловете с астрономически данни увеличават пакета на функцията. Описаната конфигурация ги включва в маршрутите, които ги използват.

Облачна база данни или самостоятелен сървър?

Избрано
Облачен Postgres с вградена защита на ниво ред
Разгледани алтернативи
Самостоятелен Postgres + отделен сървис за автентикация, Комбинация от няколко доставчика
Причина
В архивното описание Postgres и автентикацията са при общ доставчик. Правилата на ниво ред са част от контрола на достъпа; ефективността им зависи от конкретните политики и тестове.
Компромис
Подходът намалява броя услуги, но създава зависимост от доставчика и работа при бъдеща миграция.

Как се изпълняват тежките ежедневни задачи?

Избрано
Durable workflows с независими стъпки
Разгледани алтернативи
Класическа опашка с retry, Отделна инфраструктура за фонова обработка
Причина
Архивното описание разделя ежедневните AI прогнози на независими стъпки. Така неуспешна стъпка може да се повтори, без цялата партида да започва отначало.
Компромис
Този подход изисква наблюдение на състоянието и логовете на отделните стъпки. Текущият график и надеждност не са измерени.

Как пречистваме AI-генерирано HTML съдържание?

Избрано
Чист JavaScript sanitizer без DOM зависимости
Разгледани алтернативи
Браузърен sanitizer с jsdom, Собствена имплементация
Причина
Архивното описание използва sanitizer без виртуална DOM среда и разрешителен списък за вградени плеъри.
Компромис
Промяна на правилата може да премахне маркери от съдържанието. Описаният извод е бизнес структурата да се пази в устойчиви данни и атрибути.

Технологии

Интерфейс

Next.js (App Router), React, TypeScript, Tailwind CSS, Radix UI за интерактивни елементи, Анимации и 3D визуализации, Многоезичност (BG / EN)

Сървърна част

Next.js API routes, Durable workflows за тежки задачи, Edge middleware (език, auth, пренасочвания), Описана валидация на входни заявки

База данни

Облачен Postgres (Supabase), Защита на ниво ред за потребителски данни, Realtime обновления, Контролирани миграции

Вход и достъп

Email потвърждение през собствена поща, Google OAuth, Onboarding gate-ове в middleware

Плащания

Stripe Checkout (абонаменти + еднократни), Идемпотентен webhook handler, Защита при edge cases в retry логиката

AI

AI gateway с няколко доставчика, Различни модели за различни задачи, Декларативна fallback каскада, Tracking на разхода per заявка

Астрономическо ядро

WASM ядро за астрономически изчисления, Lightweight fallback за бързи изчисления, Собствени модули: solar return, profections, transits, synastry

Поща

Транзакционни имейли (Resend), React Email шаблони, IMAP четец в админ панела

Инфраструктура

Vercel (hosting + crons + edge), Cloudflare DNS, Описана PWA и offline поддръжка

Наблюдение

Vercel Analytics + Speed Insights, Microsoft Clarity (session recordings), Google Analytics + Search Console, Собствен health-alerts cron

Тестове

Unit + integration тестове, End-to-end + visual тестове, Strict TypeScript + lint

Избрани части от кода

Архивен пример: полета за период на абонамент

Архивният пример събира четенето на различни форми на полетата за абонамент в една функция. Той не удостоверява съвместимост с текущата версия на платежния API.

billing / period helper

// Single source of truth for Stripe period fields.
// Handles both pre-clover (root) and post-clover (item) shapes.
export function getSubscriptionPeriod(
  sub: Stripe.Subscription
): { start: number; end: number } {
  const item = sub.items?.data?.[0] as
    | (Stripe.SubscriptionItem & {
        current_period_start?: number;
        current_period_end?: number;
      })
    | undefined;
  const rootLike = sub as unknown as {
    current_period_start?: number;
    current_period_end?: number;
  };
  const start = item?.current_period_start ?? rootLike.current_period_start;
  const end = item?.current_period_end ?? rootLike.current_period_end;
  if (typeof start !== 'number' || typeof end !== 'number') {
    throw new Error(`Subscription ${sub.id} missing current_period fields`);
  }
  return { start, end };
}
Архивен пример: генерация по независими стъпки

Архивният пример разделя генерирането по зодия и период. Текущото изпълнение и поведението при грешки не са проверени тук.

ai-workflow / generation runner

'use workflow';

import { generateForSign } from './generate-for-sign';
import { getDailyEphemeris } from '@/lib/astrology/ephemeris-astronomy-engine';

const ZODIAC_SIGNS = [
  'aries', 'taurus', 'gemini', 'cancer', 'leo', 'virgo',
  'libra', 'scorpio', 'sagittarius', 'capricorn', 'aquarius', 'pisces',
];

export async function generateHoroscopesWorkflow() {
  const now = new Date();
  const languages: Array<'bg' | 'en'> = ['bg', 'en'];
  const periods = ['daily'];
  if (now.getDay() === 1) periods.push('weekly');
  if (now.getDate() === 1) periods.push('monthly');

  const ephemeris = getDailyEphemeris(now);

  for (const period of periods) {
    for (const sign of ZODIAC_SIGNS) {
      // Each call is a durable step. Retries independently.
      await generateForSign({ sign, period, languages, ephemeris });
    }
  }
}
Архивен пример: кеш за пренасочвания

Архивният пример пази пренасочвания за ограничено време и използва предишен кеш при грешка. Това не е гаранция за непрекъсната работа.

edge middleware / redirects

// 5-min TTL cache; stale fallback on DB error.
let redirectsCache: Map<string, {
  destination: string;
  statusCode: number;
}> | null = null;
let redirectsCacheTime = 0;
const CACHE_TTL = 5 * 60 * 1000;

async function getRedirects() {
  const now = Date.now();
  if (redirectsCache && now - redirectsCacheTime < CACHE_TTL) {
    return redirectsCache;
  }
  try {
    const { data } = await supabase
      .from('redirects')
      .select('source_path, destination_path, status_code')
      .eq('is_active', true);
    const fresh = new Map();
    for (const r of data || []) {
      fresh.set(r.source_path, {
        destination: r.destination_path,
        statusCode: r.status_code,
      });
    }
    redirectsCache = fresh;
    redirectsCacheTime = now;
    return fresh;
  } catch {
    return redirectsCache || new Map(); // stale but not broken
  }
}
Архивен пример: карта на AI моделите

Архивният пример събира избора на основен и резервни AI модели в обща карта. Текущите доставчици, модели и цени не са проверени.

ai / model router

// Декларативна карта: функция → [основен, резервен 1, резервен 2].
// Кодът пише callAI({ feature: 'daily_short' }), без да знае моделите.
export const FEATURE_MODEL_MAP: Record<AIFeature, string[]> = {
  daily_short:  ['gemini_flash_lite', 'gemini_flash',    'deepseek'],
  long_form:    ['gemini_pro',        'gemini_flash',    'deepseek'],
  // ... още функции, routing layer-ът се грижи за останалото
};

Проблеми и решения

Промяна във формата на платежните данни

Проблем
Архивният разказ описва несъвместимост между очаквано поле и формата на обектите за абонамент.
Решение
Описана е помощна функция, която чете поддържаните формати на едно място, заедно с повторна обработка на междинни платежни състояния. Няма приложен отчет за продължителността на инцидента или загубени поръчки.

Ограничено време за ежедневна AI генерация

Проблем
Архивният разказ описва партиди с прогнози на два езика, при които забавен отговор може да доведе до изтичане на времето на функцията.
Решение
Обработката е описана като отделни стъпки за всяка зодия с възможност за повторен опит. Не е приложено измерване за спад на грешките или скорост на възстановяване.

Астрономически файлове в публикуваната версия

Проблем
Архивният разказ описва липсващи файлове за изчисления след публикуване, въпреки успешната локална работа.
Решение
Описаното решение включва нужните файлове в съответните маршрути при build. Точността на изчисленията изисква отделна проверка.

Кеш за динамични пренасочвания

Проблем
Архивната реализация съчетава правила в кода и записи, управлявани от админ панела. Четенето от базата при всяка заявка добавя работа.
Решение
Описан е кеш в паметта с ограничен срок и използване на запазени данни при грешка. Не е приложен отчет за ефекта върху времето за отговор или наличността.

Подредба на нумерологична матрица

Проблем
Архивният разказ описва разменени редове и колони в помощен модул за интерпретация.
Решение
Описана е промяна на подредбата и обхождането на матрицата. Това е история на техническа корекция, а не потвърждение на нумерологичните интерпретации.

Изводи от работата

Структурата на съдържанието трябва да оцелява след пречистване

Архивният разказ описва премахнати HTML коментари след смяна на sanitizer, включително маркери за специални секции.

При следващ проект: Бизнес структурата да се пази като данни, с проверка на преобразуванията при промени в обработката на съдържанието.

Цената на AI се проверява с представителни заявки

Архивният разказ описва модел с по-висок реален разход от очаквания при кратки видими отговори.

При следващ проект: Да се измерват входът, изходът и общият разход с реалистична извадка преди смяна на модела. Тук няма публикувано измерване на спестявания.

Платежните събития изискват повторима обработка

Архивното описание разглежда прекъсване между приемането на събитие и записването на резултат, което може да забави достъп.

При следващ проект: Да се следят междинните състояния и да има проверка за безопасен повторен опит. Текущият платежен поток не е тестван в този преглед.

Промените в технологиите изискват проверка на кеша

Архивният разказ описва смесване на стари и нови стилове след миграция на няколко компонента.

При следващ проект: Да се проверяват публикуването, презареждането и изчистването на кеша заедно, включително видимият резултат в браузъра.

Какво бихте използвали за вашия бизнес?

Споделете какво ви е полезно в тези примери и какво трябва да работи по различен начин при вас.

Опишете задачата Запитването не е поръчка. Първо уточняваме задачата.

Вече имате сайт? Проверете го безплатно