diff --git a/.github/workflows/firebase-hosting-merge.yml b/.github/workflows/firebase-hosting-merge.yml
new file mode 100644
index 0000000..2a4c6ce
--- /dev/null
+++ b/.github/workflows/firebase-hosting-merge.yml
@@ -0,0 +1,27 @@
+# This file was auto-generated by the Firebase CLI
+# https://github.com/firebase/firebase-tools
+
+name: Deploy to Firebase Hosting on merge
+on:
+ push:
+ branches:
+ - main
+jobs:
+ build_and_deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 10
+ - uses: actions/setup-node@v4
+ with:
+ node-version: '20'
+ cache: 'pnpm'
+ - run: "pnpm install --frozen-lockfile && pnpm -r run build "
+ - uses: FirebaseExtended/action-hosting-deploy@v0
+ with:
+ repoToken: ${{ secrets.GITHUB_TOKEN }}
+ firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_TIL_ALARM }}
+ channelId: live
+ projectId: til-alarm
diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml
new file mode 100644
index 0000000..4d9f11e
--- /dev/null
+++ b/.github/workflows/firebase-hosting-pull-request.yml
@@ -0,0 +1,28 @@
+# This file was auto-generated by the Firebase CLI
+# https://github.com/firebase/firebase-tools
+
+name: Deploy to Firebase Hosting on PR
+on: pull_request
+permissions:
+ checks: write
+ contents: read
+ pull-requests: write
+jobs:
+ build_and_preview:
+ if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 10
+ - uses: actions/setup-node@v4
+ with:
+ node-version: '20'
+ cache: 'pnpm'
+ - run: "pnpm install --frozen-lockfile && pnpm -r run build "
+ - uses: FirebaseExtended/action-hosting-deploy@v0
+ with:
+ repoToken: ${{ secrets.GITHUB_TOKEN }}
+ firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_TIL_ALARM }}
+ projectId: til-alarm
diff --git a/.gitignore b/.gitignore
index 966bc27..c74e381 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,15 +1,15 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
-/node_modules
-/.pnp
-.pnp.js
+node_modules
# testing
/coverage
# production
-/build
+app/dist
+functions/dist
+packages/shared/dist
# misc
.DS_Store
@@ -19,6 +19,9 @@
.env.production.local
npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-.env
\ No newline at end of file
+.env
+!.env.example
+
+# firebase
+.firebase/
+firebase-debug.log*
\ No newline at end of file
diff --git a/README.md b/README.md
index 9e54254..652b7b1 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,201 @@
-# today-i-learned-alarm
-에빙하우스 망각곡선(1일, 7일, 30일)에 의거하여 공부한 내용을 매일 아침 PUSH 알림을 받을 수 있도록 해주는 프로그램
-
-
-GitHub에서 최근 커밋을 분석하고 있습니다...
+⏱️ 데이터 양에 따라 시간이 조금 걸릴 수 있습니다
+ +{card.question}
+ )} +로그인 중...
+{user.email}
+
+ 이제 GitHub에 남긴 학습 기록을
RecallBuddy를 통해 오래 기억하세요🍀
로그인하면 GitHub의 공개 정보에 접근할 수 있습니다
+
+ + 최근 커밋에서 학습할 내용을 찾지 못했습니다 +
++ ⚙️ 설정 에서 다른 리포지토리나 브랜치를 시도해보세요 +
+ + +
+
+ RecallBuddy가 여러분의 학습을
+ 소중한 장기 기억으로 만들어드립니다
+
+ 학습하고 싶은 GitHub 리포지토리를 선택해주세요 +
+ + {/* 에러 메시지 */} + {error && ( +{error.message}
+
+ 플래시카드를 생성하고 있습니다...
+ 잠시만 기다려주세요
+
설정을 불러오는 중...
++ {notice.message} +
+ ))} ++ {repositories.length > 0 + ? `총 ${repositories.length}개의 리포지토리를 찾았습니다` + : '접근 가능한 리포지토리가 없습니다'} +
+ + {loadingRepos ? ( +📂 선택된 리포지토리:
+
+
+ {settings.repositoryUrl}
+
+
+ + 커밋을 가져올 브랜치를 선택하세요 + {branches.length > 0 && ` (총 ${branches.length}개의 브랜치)`} +
+ + {loadingBranches ? ( ++ 리포지토리를 선택하면 브랜치 목록이 표시됩니다. +
+ )} ++ ℹ️ GitHub OAuth로 로그인하여 접근 가능한 모든 리포지토리가 표시됩니다. +
++ 🔒 = Private 리포지토리, 🌐 = Public 리포지토리 +
+ + {/* 릴리즈 노트 */} + + + {/* 계정 관리 */} ++ 계정 로그아웃 또는 서비스 탈퇴를 진행할 수 있습니다. +
++ 정말 탈퇴하시겠어요? 걱정하지 마세요, 언제든 다시 돌아올 수 있습니다. +
+✨ 탈퇴 시 안내사항
+
+ {children}
+
+ );
+ },
+ h2: ({ children }) => (
+
+ {children}
+
+ );
+ }
+ },
+ }}
+ >
+ {markdown}
+
+ 본 약관은 RecallBuddy(이하 "서비스")의 이용과 관련하여 서비스와 이용자의 권리, 의무 및 책임사항을 규정함을 목적으로 합니다.
+ +1. "서비스"란 RecallBuddy가 제공하는 학습 관리 및 플래시카드 서비스를 의미합니다.
+2. "이용자"란 본 약관에 따라 서비스를 이용하는 회원을 말합니다.
+3. "회원"이란 서비스에 접속하여 본 약관에 따라 서비스를 이용하는 고객을 말합니다.
+ +1. 서비스는 본 약관의 내용을 이용자가 쉽게 알 수 있도록 서비스 초기 화면에 게시합니다.
+2. 서비스는 필요한 경우 관련 법령을 위배하지 않는 범위에서 본 약관을 개정할 수 있습니다.
+ +1. 서비스는 다음과 같은 업무를 수행합니다:
+- GitHub 저장소 연동을 통한 학습 내용 관리
+- 플래시카드 기반 학습 서비스
+- 학습 알림 서비스
+2. 서비스는 연중무휴, 1일 24시간 제공함을 원칙으로 합니다.
+ +서비스는 컴퓨터 등 정보통신설비의 보수점검, 교체 및 고장, 통신의 두절 등의 사유가 발생한 경우에는 서비스의 제공을 일시적으로 중단할 수 있습니다.
+ +1. 이용자는 GitHub 계정을 통해 회원가입을 신청합니다.
+2. 서비스는 제1항과 같이 회원으로 가입할 것을 신청한 이용자 중 다음 각 호에 해당하지 않는 한 회원으로 등록합니다:
+- 이전에 회원자격을 상실한 적이 있는 경우
+- 실명이 아니거나 타인의 명의를 이용한 경우
+ +1. 회원은 서비스에 언제든지 탈퇴를 요청할 수 있으며 서비스는 즉시 회원탈퇴를 처리합니다.
+2. 회원탈퇴 후 24시간 동안은 재가입이 제한됩니다.
+ +서비스는 관련 법령이 정하는 바에 따라 회원의 개인정보를 보호하기 위해 노력합니다. 개인정보의 보호 및 사용에 대해서는 관련 법령 및 서비스의 개인정보처리방침이 적용됩니다.
+ +1. 서비스는 천재지변 또는 이에 준하는 불가항력으로 인하여 서비스를 제공할 수 없는 경우에는 서비스 제공에 관한 책임이 면제됩니다.
+2. 서비스는 회원의 귀책사유로 인한 서비스 이용의 장애에 대하여는 책임을 지지 않습니다.
+ > + ) : ( + <> +RecallBuddy는 다음의 목적을 위하여 개인정보를 처리합니다:
+- 회원 가입 및 관리: GitHub 계정 정보를 통한 본인 확인
+- 서비스 제공: GitHub 저장소 연동 및 학습 콘텐츠 관리
+- 알림 서비스: 학습 알림 제공
+ +서비스는 다음의 개인정보를 수집합니다:
+- 필수항목: GitHub 사용자 ID, 이메일 주소, 프로필 사진, GitHub OAuth 토큰, GitHub 저장소 정보
+- 자동수집항목: 서비스 이용 기록, 접속 로그
+ +회원의 개인정보는 회원 탈퇴 시까지 보유 및 이용됩니다. 다만, 다음의 경우는 예외로 합니다:
+- 관계 법령 위반에 따른 수사, 조사 등이 진행중인 경우에는 해당 수사, 조사 종료 시까지
+- 서비스 이용에 따른 채권, 채무관계 잔존 시에는 해당 채권, 채무관계 정산 시까지
+ +서비스는 원칙적으로 이용자의 개인정보를 제3자에게 제공하지 않습니다. 다만, 다음의 경우는 예외로 합니다:
+- 이용자가 사전에 동의한 경우
+- 법령의 규정에 의거하거나, 수사 목적으로 법령에 정해진 절차와 방법에 따라 수사기관의 요구가 있는 경우
+ +서비스는 개인정보 보유기간의 경과, 처리목적 달성 등 개인정보가 불필요하게 되었을 때에는 지체없이 해당 개인정보를 파기합니다.
+ +서비스는 개인정보보호법에 따라 다음과 같이 안전성 확보에 필요한 기술적/관리적 조치를 하고 있습니다:
+- 개인정보 암호화: GitHub OAuth 토큰 등 중요 정보는 암호화하여 저장
+- 접근권한 관리: 개인정보에 대한 접근권한을 최소한의 인원으로 제한
+ +이용자는 언제든지 다음의 권리를 행사할 수 있습니다:
+- 개인정보 열람 요구
+- 개인정보 정정 요구
+- 개인정보 삭제 요구
+- 개인정보 처리정지 요구
+ +서비스는 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 이용자의 불만처리 및 피해구제를 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.
+개인정보 보호책임자: RecallBuddy 운영팀
+ +이 개인정보처리방침은 시행일로부터 적용되며, 법령 및 방침에 따른 변경내용의 추가, 삭제 및 정정이 있는 경우에는 변경사항의 시행 7일 전부터 공지사항을 통하여 고지할 것입니다.
+ > + )} +- {text} -
- ); -}; \ No newline at end of file diff --git a/src/modules/utils.js b/src/modules/utils.js deleted file mode 100644 index a898be4..0000000 --- a/src/modules/utils.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Converts the given number of days into milliseconds. - * - * @param {number} days - The number of days to convert. - * @returns {number} The millisecond value for the input number of days. - */ -export function convertDaysToMilliseconds(days) { return 24 * days * 60 * 60 * 1000 }; - -/** - * get current date formatter - * @since 2024-03-03 - * @returns yyyy-mm-dd - */ -export function getCurrentDate() { - const currentDate = new Date(); - - const year = currentDate.getFullYear(); - const month = String(currentDate.getMonth() + 1).padStart(2, '0'); // 월은 0부터 시작하므로 1을 더하고 두 자리로 포맷팅 - const day = String(currentDate.getDate()).padStart(2, '0'); // 날짜를 두 자리로 포맷팅 - - const formattedDate = `${year}-${month}-${day}`; - - return formattedDate; -} \ No newline at end of file diff --git a/src/pages/Auth.js b/src/pages/Auth.js deleted file mode 100644 index 6bc59ea..0000000 --- a/src/pages/Auth.js +++ /dev/null @@ -1,37 +0,0 @@ -import React, { useState } from 'react' -import { supabase } from '../supabaseClient' - -const Auth = () => { - const [loading, setLoading] = useState(false); - - const handleLogin = async (event) => { - event.preventDefault(); - - setLoading(true); - //const { error } = await supabase.auth.signInWithOtp({ email }); - const error = false; - - if (error) { - alert(error.error_description || error.message); - } else { - alert('Check your email for the login link!'); - } - setLoading(false); - } - - return ( -Sign in with your github email address below
-{card.question}
} -