CleanFrame
삼성 The Frame용 개인 홈 화면, 포크와 맞춤을 위한 시작점
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Next.js + Supabase + Tailwind CSS 기반 웹앱 프로젝트입니다. • Node.js 18.18 이상 (LTS 권장) • nodejs.org에서 설치 1. Node.js 설치 nodejs.org에서 LTS 버전 다운로드 후 설치합니다. 3. Supabase 환경 변수 설정 .env.local 파일에 Supabase 프로젝트 값을 넣습니다. 값은 Supabase 대시보드 → 프로젝트 → Settings → API에서 확인할 수 있습니다. (연동 전까지는 빈 값으로 두어도 앱 실행은 가능합니다.)README 전문 보기 ↗
Next.js + Supabase + Tailwind CSS 기반 웹앱 프로젝트입니다.
Node.js 설치
nodejs.org에서 LTS 버전 다운로드 후 설치합니다.
의존성 설치
npm install
Supabase 환경 변수 설정
.env.local 파일에 Supabase 프로젝트 값을 넣습니다.
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
값은 Supabase 대시보드 → 프로젝트 → Settings → API에서 확인할 수 있습니다.
(연동 전까지는 빈 값으로 두어도 앱 실행은 가능합니다.)
개발 서버 실행
npm run dev
DB 스키마 적용 (최초 1회)
Supabase 대시보드 → SQL Editor에서 아래 순서로 실행합니다.
supabase/migrations/001_initial_schema.sqlsupabase/migrations/002_g2b_tenders.sql (나라장터 입찰·계약·키워드 테이블)supabase/migrations/003_clean_related.sql (청소 관련 필터 컬럼)supabase/migrations/004_tender_keywords_type.sql (키워드 구분: 포함/제외)supabase/migrations/005_tender_categories.sql (업종: 청소/소독·방역, tenders.categories)관리자 로그인 설정
supabase/set_admin.sql 내용 실행 (이메일을 본인 주소로 수정 가능)브라우저에서 http://localhost:3001 으로 접속합니다.
.env.local에 DATA_GO_KR_SERVICE_KEY=발급받은_인증키 추가POST /api/cron/fetch-g2b 호출 (헤더 x-cron-secret에 CRON_SECRET 값 전달).tender_keywords 테이블에 있으며, 관리자 페이지에서 추후 수정 가능하도록 확장할 수 있습니다.tenders.categories 배열에 매칭된 업종(cleaning, disinfection) 저장. 사용자 검색: 청소만 / 소독·방역만 / 청소+소독·방역 / 전체 선택 가능.POST /api/cron/backfill-clean-score 호출.| 명령어 | 설명 |
|---|---|
npm run dev | 개발 서버 실행 (Hot Reload) |
npm run build | 프로덕션 빌드 |
npm run start | 빌드된 앱 실행 |
npm run lint | ESLint 실행 |
├── app/ # Next.js App Router
│ ├── admin/ # 관리자 (글, 뉴스레터 큐, UGC 검수, 신고, 광고)
│ ├── api/ # API (뉴스레터 발송, cron, 인증)
│ ├── archive/ # 뉴스레터 아카이브
│ ├── categories/ # 카테고리·글 목록
│ ├── posts/ # 글 상세
│ ├── ugc/ # 현장·후기 목록·쓰기
│ ├── login, signup/
├── components/
├── lib/ # Supabase 클라이언트, 타입
├── supabase/migrations/ # DB 스키마 (Supabase SQL Editor에서 실행)
└── .env.local
newslett).NEXT_PUBLIC_SUPABASE_URL에 넣을 값NEXT_PUBLIC_SUPABASE_ANON_KEY에 넣을 값프로젝트 루트의 .env.local 파일을 열고 다음처럼 입력(복사한 값으로 교체):
NEXT_PUBLIC_SUPABASE_URL=https://xxxxxxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
xxxxxxxx 부분은 본인 프로젝트 URL에 맞게.클라이언트 컴포넌트 (브라우저):
"use client";
import { createClient } from "@/lib/supabase";
const supabase = createClient();
// 예: const { data } = await supabase.from("테이블명").select();
서버 컴포넌트 / API 라우트:
import { createClient } from "@/lib/supabase-server";
const supabase = createClient();
// 예: const { data } = await supabase.from("테이블명").select();
@supabase/ssr 기반으로 쿠키 연동을 추가하면 됩니다.