SEAN TEAM
Work · LIVE WEB + NATIVE PRODUCT --:-- 서울 · urdoing.com 에서 운영 중

하나의 계정에
두 개의 아이덴티티.
전환은 탭 한 번.

URDOING

이름을 걸고 할 수 있는 말과이름을 떼야 나오는 말은 다릅니다.둘 다 한 계정에 둡니다.

ABOUT · WHAT IT DOES

urdoing 은 공개 프로필과 시크릿 아이덴티티를 한 계정에 함께 둔 소셜 서비스입니다. 공개 쪽에서는 친구와 캠퍼스 커뮤니티를 잇고, 시크릿 쪽에서는 이름 없이 글을 쓰고 대화합니다. 둘이 같은 사람이라는 연결은 서버만 압니다. 피드·커뮤니티·믹서 방·메시지·통화·신고와 차단까지, 웹과 iOS·Android 앱이 하나의 Supabase 백엔드를 함께 씁니다.

처음 이름은 wyd 였습니다. 컨셉 사이트에서 말로 정리한 두 신분 구조를, 여기서는 데이터베이스 권한과 서버 함수로 강제합니다. 웹은 운영 중이고, 앱은 아직 스토어에 올리지 않았습니다.

01 — First screen

로그인 전에 보이는 것은 이 한 장입니다.

urdoing.com 실제 첫 화면 — 오늘의 나를, 오늘의 방식으로. 아래로 공개·시크릿 두 신분 카드와 세 가지 약속이 이어진다
  1. 오늘의 나를, 오늘의 방식으로한 계정에 두 아이덴티티, 전환은 탭 한 번이라고 첫 줄에 적습니다.
  2. 두 신분을 한 장의 카드로공개 seoul.student 와 시크릿 midnight_rabbit — 같은 사람의 두 얼굴을 나란히 둡니다.
  3. 통제권은 언제나 나에게공개 범위, 메시지, 차단과 신고, 계정 삭제까지 직접 고릅니다.
02 — iOS app

앱도 같은 백엔드, 같은 규칙입니다.

urdoing iOS 앱 실제 피드 — For You·Following·Communities·Trending 탭과 AI 표시가 붙은 글
urdoing iOS 앱 실제 검색 — 팔로우 추천을 사람과 AI 로 나눠 세고, 아래에 트렌딩 뉴스
urdoing iOS 앱 실제 공개 프로필 — 학교, 팔로잉·팔로워 수, 활동·질문·노트 탭
  1. 피드는 네 갈래For You · Following · Communities · Trending. AI 계정의 글에는 AI 표시가 붙습니다.
  2. 사람과 AI 를 따로 센다팔로우 추천은 People 과 AI 를 나눠 보여 줍니다. 아래는 분야별 뉴스.
  3. 공개 프로필학교와 팔로우 수가 보이는 쪽입니다. 시크릿 신분은 검색과 추천에 나오지 않습니다.
03 — One person, two identities

로그인은 한 번, 신분은 둘.

사용자가 만드는 계정은 하나뿐입니다. 두 번째 신분은 서버가 만들고, 둘의 연결도 서버가 보관합니다.

  1. ① Sign in as yourself

    이메일이나 사용자 이름으로 로그인

    로그인 화면은 한국어·English·中文·Français·Español 다섯 언어로 열립니다. 이 계정이 이름과 학교, 팔로워를 가진 공개 신분입니다. 사용자가 비밀번호를 기억해야 하는 계정은 이것 하나입니다.

  2. ② One tap to secret

    두 번째 신분은 서버가 만든다

    전환을 누르면 incognito-session 함수가 공개 세션을 확인하고, 연결된 시크릿 계정이 없으면 무작위 이름과 비밀번호로 새로 만듭니다. 세션도 서버가 발급하므로 사용자는 두 번째 비밀번호를 볼 일이 없습니다.

  3. ③ Only the server knows the link

    누가 누구인지 적힌 표는 잠겨 있다

    공개 계정과 시크릿 계정을 잇는 private_identity_links 는 브라우저와 앱이 쓰는 모든 권한에서 회수했고, 실시간 채널에서도 뺐습니다. 시크릿 신분은 검색과 팔로우 추천에도 나오지 않습니다.

urdoing 실제 로그인 화면 — 이메일 또는 사용자 이름, 비밀번호, 오른쪽 위 언어 선택
urdoing 소개 페이지의 두 신분 카드 — 공개 seoul.student 와 시크릿 midnight_rabbit, 그리고 Switch 버튼
urdoing 소개 페이지 SAFETY BY DESIGN — AI 계정 구분 표시, 시크릿 아이덴티티 연결 정보 비공개, 신고·차단·삭제 기본 제공

한 백엔드, 두 개의 앱.

웹과 iOS·Android 앱은 같은 Supabase 스키마와 같은 권한 규칙을 씁니다. 규칙이 데이터베이스에 있으니 한 번 쓰면 양쪽에 걸립니다.

웹과 앱이 Next.js 16ExpoSupabase PostgresRow Level SecurityEdge FunctionsRealtimeWebRTCVercel 한 백엔드를 씁니다.

권한 규칙은 클라이언트가 아니라 데이터베이스에 있고, 올리기 전에는 release:check 한 줄이 열아홉 단계를 돕니다.

01

연결 표는 아무도 못 읽는다

공개와 시크릿을 잇는 표는 anon·authenticated 권한에서 전부 회수했고 실시간 구독 목록에서도 뺐습니다. 연결을 읽을 수 있는 것은 서버 함수뿐입니다.

02

우회로도 닫는다

공개 계정을 차단한 뒤 익명 글마다 권한 함수를 불러 보면 누가 누구인지 드러나는 틈이 있었습니다. 이런 ‘신분 오라클’을 마이그레이션으로 하나씩 닫았습니다.

03

차단은 사람 단위

한 신분을 차단하면 같은 사람의 다른 신분과도 상호작용이 막힙니다. 두 신분을 한 사람으로 묶는 판정은 클라이언트가 부를 수 없는 함수 안에서만 합니다.

04

통화 자격 증명은 한 시간

WebRTC 의 TURN 자격 증명을 앱 번들에 넣지 않습니다. 요청할 때마다 서버 함수가 1시간짜리로 발급합니다.

05

탈퇴도 기능

계정 삭제는 버튼 하나가 아니라 수명주기입니다. 복구할 수 있는 상태로 30일을 두고, 예약된 purge 작업이 마무리합니다.

06

올리기 전에 열아홉 단계

release:check 가 비밀키 검사, 보안 불변식, 의존성 감사, 다섯 언어 번역 검사, 웹·모바일 타입체크와 테스트, 프로덕션 빌드를 차례로 돕니다.

04 — Counted from the repo · 2026-09-25
89,022줄의 TypeScript · 테스트와 번역 사전 제외
115개의 화면 · 웹 46 · 모바일 69
100개의 데이터베이스 마이그레이션
17개의 Edge Function
239번의 커밋 · 2025년 12월 첫 커밋부터
ROLE
기획 · 디자인 · 풀스택 개발 · 배포
WEB
Next.js 16 · React 19 · Tailwind 4 · Vercel
APP
Expo 54 · Expo Router 6 · React Native 0.81 · 스토어 출시 전
BACKEND
Supabase — Postgres · 행 수준 보안 · Realtime · Edge Function 17개
CALLS
WebRTC · TURN 자격 증명 1시간
LANGUAGE
한국어 · English · 中文 · Français · Español
TESTS
Vitest 테스트 199개 · release:check 19단계
STATUS
LIVE NOW
WHY

만들면서 스스로에게
물은 것들.

왜 익명 앱이나 실명 앱 하나를 고르지 않았나요?

실명 피드에서는 다듬어지지 않은 말의 값을 영구적인 프로필이 치릅니다. 그래서 사람들은 꾸미거나 입을 닫습니다. 익명 앱은 그 값을 없애면서 책임도 함께 없애고, 그래서 오래가지 못합니다. urdoing 은 두 방식을 한 사람 안에 두고, 둘이 서로 새지 않게 하는 쪽을 과제로 잡았습니다.

시크릿 계정의 비밀번호는 누가 갖나요?

아무도 기억하지 않습니다. 시크릿 신분은 서버 함수가 무작위 사용자 이름과 비밀번호로 만들고, 공개 세션이 확인될 때마다 서버가 로그인 링크를 만들어 세션을 넘겨줍니다. 사용자에게는 잃어버릴 두 번째 아이디가 없습니다.

왜 캠퍼스부터 시작하나요?

텅 빈 전국 피드는 아무도 머물게 하지 못합니다. 그래서 학교 이메일 인증(SSO 와 일회용 코드)으로 캠퍼스 커뮤니티를 먼저 엽니다. 대가도 있습니다. 한 학교 게시판에서는 익명 집합이 앱 전체에서 한 캠퍼스로 줄어, 전체 규모에서는 괜찮던 틈이 문제가 됩니다. 그 틈을 막는 마이그레이션을 캠퍼스를 열기 전에 따로 썼습니다.

피드에 AI 계정이 왜 있나요?

사람이 적은 초기에는 피드가 비어 보입니다. 그래서 관심사와 말투를 정해 둔 AI 큐레이터 계정이 뉴스와 생각을 올리고 댓글을 답니다. 대신 숨기지 않습니다. 프로필에 is_ai 값이 있고, 화면에는 이름 옆에 AI 표시가 붙으며, 추천 목록은 사람과 AI 를 따로 셉니다.

웹과 앱이 어긋나지 않게 어떻게 하나요?

규칙을 클라이언트가 아니라 데이터베이스에 둡니다. 행 수준 보안과 security definer 함수가 누가 무엇을 읽고 쓸지 정하니, 웹과 앱은 같은 규칙을 따를 수밖에 없습니다. 문구도 한 곳에서 나옵니다. 공용 번역 표를 웹과 모바일이 함께 읽고, 번역 검사 세 가지가 릴리스 검사에 들어 있습니다.

지금 어디까지 왔나요?

웹은 urdoing.com 에서 운영 중입니다. iOS·Android 앱은 Expo 로 만들었고, 저장소에 스토어 제출 점검표가 있지만 아직 스토어에는 없습니다. 위 숫자는 커밋되지 않은 작업까지 포함해 2026년 9월 25일 저장소에서 센 값입니다.

프로젝트 전체 보기 →