์์ฐ์ฑ ํฅ์์ ์ํ ํตํฉ ํ์ด๋จธ ๋ฐ ํ ์ผ ๊ด๋ฆฌ Chrome ํ์ฅ ํ๋ก๊ทธ๋จ
One Focus๋ ํฌ๋ชจ๋๋ก ๊ธฐ๋ฒ์ ํ์ฉํ ํ์ด๋จธ์ ํ ์ผ ๊ด๋ฆฌ๋ฅผ ๊ฒฐํฉํ ์์ฐ์ฑ ๊ด๋ฆฌ ๋๊ตฌ์ ๋๋ค. Chrome ํ์ฅ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ฐ๋ฐ๋์ด ์ ํญ์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋๊ธฐ๋ถ์ฌ๋ฅผ ์ํ ๋ช ์ธ๊ณผ ํจ๊ป ์ง์คํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
- ํฌ๋ชจ๋๋ก ๊ธฐ๋ฒ ๊ธฐ๋ฐ์ ์ง์ค ์๊ฐ ๊ด๋ฆฌ
- ์ค์๊ฐ ์งํ๋ฅ ํ์ - ์ํ ํ๋ก๊ทธ๋ ์ค ๋ฐ๋ก ๋จ์ ์๊ฐ ์๊ฐํ
- ๋๋๊ทธ ์ค ๋๋กญ - ์ง๊ด์ ์ธ ์์ ๋ณ๊ฒฝ
- ์นดํ ๊ณ ๋ฆฌ ๋ถ๋ฅ - ์์ ์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌ
- ์๊ฐ ํ ๋น - ๊ฐ ์์ ์ ์ง์ค ์๊ฐ์ ์ค์
- ์ฐ์ ์์ ๊ด๋ฆฌ - ์์ ์์๋ฅผ ์์ ๋กญ๊ฒ ์กฐ์
- ๋ช ์ธ ์นด๋ - ๋งค์ผ ์๋ก์ด ์๊ฐ์ ์ ๊ณตํ๋ ๋ช ์ธ
- ๋ค๊ตญ์ด ์ง์ - ํ๊ตญ์ด/์์ด ์ธํฐํ์ด์ค
- ์๋ฆ๋ค์ด UI - ์ง์ค์ ๋ฐฉํดํ์ง ์๋ ๋ฏธ๋๋ฉํ ๋์์ธ
- Chrome ํ์ฅ ํ๋ก๊ทธ๋จ - ์ ํญ์์ ๋ฐ๋ก ์ฌ์ฉ
- ๋ก์ปฌ ์คํ ๋ฆฌ์ง - ๋ฐ์ดํฐ๋ ๋ธ๋ผ์ฐ์ ์ ์์ ํ๊ฒ ์ ์ฅ
- ๋ฐ์ํ ๋์์ธ - ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ์ต์ ํ
- ๋คํฌ ํ ๋ง - ๋์ ํผ๋ก๋ฅผ ์ค์ด๋ ์ด๋์ด ํ ๋ง
Chrome ์น ์คํ ์ด์์ One Focus๋ฅผ ์ง์ ์ค์นํ ์ ์์ต๋๋ค:
๊ฐํธ ์ค์น ๋ฐฉ๋ฒ:
- ์์ ์ค์น ๋ฒํผ์ ํด๋ฆญํ๊ฑฐ๋ Chrome ์น ์คํ ์ด๋ฅผ ๋ฐฉ๋ฌธํ์ธ์
- "Chrome์ ์ถ๊ฐ" ๋ฒํผ์ ํด๋ฆญํ์ธ์
- ์ค์น๋ฅผ ํ์ธํ์ธ์
- ์ ํญ์ ์ด์ด One Focus๋ฅผ ์ฌ์ฉํด๋ณด์ธ์!
๊ฐ๋ฐ์์ฉ ์ค์น (์์ค์ฝ๋์์): ์์ค์ฝ๋์์ ์ค์นํ๊ณ ์ถ๋ค๋ฉด ์ด ์ ์ฅ์๋ฅผ ํด๋ก ํ๊ณ Chrome์ ๊ฐ๋ฐ์ ๋ชจ๋์์ ์์ถํด์ ๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ก๋ํ ์ ์์ต๋๋ค.
- ํ ์ผ ์ถ๊ฐ: "+" ๋ฒํผ์ ํด๋ฆญํ์ฌ ์๋ก์ด ์์ ์ ์ถ๊ฐํฉ๋๋ค
- ํ์ด๋จธ ์์: ํ ์ผ ๋ชฉ๋ก์์ ์ํ๋ ์์ ์ ํ์ด๋จธ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค
- ์ง์คํ๊ธฐ: ์ค์ ๋ ์๊ฐ ๋์ ์ง์คํ๋ฉฐ ์์ ์ ๋ชฐ์ ํฉ๋๋ค
- ํด์: ํ์ด๋จธ ์๋ฃ ํ ์ ์ ํ ํด์์ ์ทจํฉ๋๋ค
- React 18 - ์ต์ React ๊ธฐ๋ฅ ํ์ฉ
- TypeScript - ํ์ ์์ ์ฑ ๋ณด์ฅ
- Vite - ๋น ๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ
- Tailwind CSS - ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฐ ์คํ์ผ๋ง
- Radix UI - ์ ๊ทผ์ฑ์ด ๋ฐ์ด๋ UI ์ปดํฌ๋ํธ
- Zustand - ๊ฐ๋ฒผ์ด ์ํ ๊ด๋ฆฌ
- React Query - ์๋ฒ ์ํ ๊ด๋ฆฌ (ํฅํ ํ์ฅ์ฉ)
- Manifest V3 - ์ต์ Chrome ํ์ฅ ํ๋ก๊ทธ๋จ API
- Service Worker - ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ฒ๋ฆฌ
- Chrome Storage API - ๋ฐ์ดํฐ ์์์ฑ
- ESLint - ์ฝ๋ ํ์ง ๊ด๋ฆฌ
- Prettier - ์ฝ๋ ํฌ๋งทํ
- Storybook - ์ปดํฌ๋ํธ ๋ฌธ์ํ
- Cypress - E2E ํ ์คํ
src/
โโโ components/ # React ์ปดํฌ๋ํธ
โ โโโ oneFocus/ # One Focus ์ ์ฉ ์ปดํฌ๋ํธ
โ โ โโโ timer/ # ํ์ด๋จธ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โ โโโ todoList/ # ํ ์ผ ๋ชฉ๋ก ์ปดํฌ๋ํธ
โ โ โโโ quote/ # ๋ช
์ธ ์นด๋ ์ปดํฌ๋ํธ
โ โ โโโ ui/ # UI ์ปดํฌ๋ํธ
โ โโโ ui/ # ๊ณตํต UI ์ปดํฌ๋ํธ
โโโ stores/ # Zustand ์ํ ๊ด๋ฆฌ
โโโ hooks/ # ์ปค์คํ
React ํ
โโโ utils/ # ์ ํธ๋ฆฌํฐ ํจ์
โโโ types/ # TypeScript ํ์
์ ์
โโโ i18n/ # ๋ค๊ตญ์ด ์ง์
โโโ pages/ # ํ์ด์ง ์ปดํฌ๋ํธ
- ๋ฏธ๋๋ฉ ๋์์ธ - ์ง์ค์ ๋ฐฉํดํ์ง ์๋ ๊น๋ํ ์ธํฐํ์ด์ค
- ๋คํฌ ํ ๋ง - ๋์ ํผ๋ก๋ฅผ ์ค์ด๋ ์ด๋์ด ์์ ํ๋ ํธ
- ๋ฐ์ํ ๋ ์ด์์ - ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ์ต์ ํ
- ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ - ์์ฐ์ค๋ฌ์ด ์ ํ ํจ๊ณผ
- ์ง๊ด์ ์ธ ๋ค๋น๊ฒ์ด์ - ์ฌ์ฉํ๊ธฐ ์ฌ์ด ์ธํฐํ์ด์ค
# ๊ฐ๋ฐ ์๋ฒ ์คํ
yarn dev
# ํ๋ก๋์
๋น๋
yarn build
# ์ฝ๋ ๋ฆฐํ
yarn lint
# ์ฝ๋ ํฌ๋งทํ
yarn format
# ํ
์คํธ ์คํ
yarn test
# Storybook ์คํ
yarn storybook
# Cypress E2E ํ
์คํธ
yarn cypress:open- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
ํ๋ก์ ํธ ๋งํฌ: https://github.com/Attraction-of-John/OneFocus
- Radix UI - ์ ๊ทผ์ฑ์ด ๋ฐ์ด๋ UI ์ปดํฌ๋ํธ
- Lucide React - ์๋ฆ๋ค์ด ์์ด์ฝ
- Tailwind CSS - ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฐ CSS ํ๋ ์์ํฌ
- Zustand - ๊ฐ๋ฒผ์ด ์ํ ๊ด๋ฆฌ
One Focus์ ํจ๊ป ๋ ๋์ ์์ฐ์ฑ์ ๊ฒฝํํด๋ณด์ธ์! ๐