// OPEN DATA LAYER · v1.0
Hash-and-delete
Не «ми не зливаємо ваші дані». Простіше: даних, які можна злити, у нас немає. Оригінали LinkedIn ID і робочих email видаляються одразу після хешування.
// УРОК GLASSDOOR · 2024
Glassdoor зберігав «зашифровані» імена «на всяк випадок». У 2024 році почав показувати реальні імена в профілях. Урок засвоєний: якщо ти можеш розшифрувати - колись ти розшифруєш. У нас не залишається даних, які можна розшифрувати.
// 01 / РЕПОЗИТОРІЇ
ВІДКРИТЕ І ПРИВАТНЕ
● PUBLIC REPO
ebanutoe/privacy
Prisma schema, Auth.js v5 config, хеш-функції, міграції, скрипти зачистки оригіналів. Чого тут немає - алгоритму модерації.
○ PRIVATE REPO
ebanutoe/platform
Логіка підтверджень, anti-spam, ранжування. Закрите - щоб обійти його було складніше.
// 02 / ЩО ВИДАЛЯЄТЬСЯ
HASH AND DELETE
linkedin_sub→sha256→hash & deleteDELETE
work_email→sha256→hash & deleteDELETE
ip_address (просто не пишемо)→sha256→hash & deleteDELETE
// КОД (фрагмент із публічного репо)
// auth/[...nextauth].ts
async signIn({ profile }) {
const sub = profile.sub;
const hash = await sha256(sub);
await prisma.user.upsert({
where: { linkedinHash: hash },
create: { linkedinHash: hash, pseudonym: randomAnimal() },
update: {},
});
// sub, name, email НЕ зберігаємо
return true;
}// 03 / SCHEMA
PRISMA SCHEMA
// 04 / МАТРИЦЯ ЗАХИСТУ
ЩО ДЕ ЛЕЖИТЬ
| LinkedIn sub | sha256, оригінал -> DELETE одразу |
| LinkedIn name | не зберігаємо, не передаємо |
| LinkedIn email | не зберігаємо, не передаємо |
| Робочий email | sha256, зберігаємо тільки домен |
| IP-адреса | не логується ніде - ні CDN, ні runtime |
| User-Agent | не логується |
| Сесія | JWT, 4h, без зв'язку з аутентифікацією |
| Whois домену | privacy on |
| Юрисдикція | USA · Vercel · Cloudflare |
| Деанон | технічно неможливий - оригіналів немає |
// 05 / СТЕК