From a537e0d2808e3031f162c2636f1508dc7df8a4a7 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Tue, 15 Jul 2025 01:51:15 +0900 Subject: [PATCH 01/12] =?UTF-8?q?feat(header):=20color=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20=EA=B2=80=EC=83=89=20=EC=B0=BD=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/components/features/Header.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/shared/components/features/Header.tsx b/src/shared/components/features/Header.tsx index c8ca8e0..e0e58be 100644 --- a/src/shared/components/features/Header.tsx +++ b/src/shared/components/features/Header.tsx @@ -1,19 +1,28 @@ import Link from 'next/link'; import { routerPath } from '@/shared/constants'; -import { Sun } from 'lucide-react'; +import { Search, Sun } from 'lucide-react'; + +import { Input } from '../ui'; export const Header = () => { return ( -
+

Dobblog

+
+ + +
-

About

+

About

- +
); From f12673408fd58a8b4665c4cbc54406bc76860443 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 18:46:52 +0900 Subject: [PATCH 02/12] =?UTF-8?q?feat(footer):=20=EA=B0=9C=EC=9D=B8=20?= =?UTF-8?q?=EC=97=B0=EB=9D=BD=EC=B2=98=20=EB=B0=8F=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/features/layout/Footer.tsx | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/shared/components/features/layout/Footer.tsx diff --git a/src/shared/components/features/layout/Footer.tsx b/src/shared/components/features/layout/Footer.tsx new file mode 100644 index 0000000..5483d9f --- /dev/null +++ b/src/shared/components/features/layout/Footer.tsx @@ -0,0 +1,32 @@ +import Link from 'next/link'; + +export const Footer = () => { + return ( +
+
+

+ Copyright © 2025 Dobbymin All rights reserved. +

+
+ gmin0701@knu.ac.kr + . + +82-10-3095-7259 + . + + GitHub + + . + + LinkedIn + +
+
+
+ ); +}; From ac92907bbdfb19580a50da59c2ce323ca4b12972 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 18:47:13 +0900 Subject: [PATCH 03/12] =?UTF-8?q?feat:=20=EC=8B=9C=EB=A9=98=ED=8B=B1=20col?= =?UTF-8?q?or=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/globals.css | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/globals.css b/src/app/globals.css index 2cbc91b..7c4672a 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -16,6 +16,8 @@ --color-blog-blue: var(--blog-blue); --color-blog-green: var(--blog-green); --color-blog-yellow: var(--blog-yellow); + --color-blog-black: var(--blog-black); + --color-blog-gray-600: var(--blog-gray-600); --color-blog-gray-500: var(--blog-gray-500); --color-blog-gray-400: var(--blog-gray-400); --color-blog-gray-300: var(--blog-gray-300); @@ -62,6 +64,11 @@ --height-content: calc( 100vh - var(--height-header) - 2 * var(--header-padding-y) ); + --height-footer: var(--footer-height); + --padding-footer: var(--footer-height) 0; + --line-height-footer: calc( + var(--footer-height) - 2 * var(--footer-padding-x) + ); } :root { @@ -70,11 +77,14 @@ --header-padding-x: 1rem; --header-padding-y: 3rem; --card: oklch(1 0 0); + --footer-height: 92px; --blog-purple: oklch(0.6095 0.2382 332.15); --blog-pink: oklch(0.5717 0.2063 13.44); --blog-blue: oklch(0.5332 0.2106 263.54); --blog-green: oklch(0.684 0.1136 154.11); --blog-yellow: oklch(0.7266 0.1318 91.46); + --blog-black: oklch(0.3496 0.0141 274.5); + --blog-gray-600: oklch(0.6428 0.0152 248.06); --blog-gray-500: oklch(0.8196 0.0047 258.33); --blog-gray-400: oklch(0.8779 0.0026 228.79); --blog-gray-300: oklch(0.9401 0 0); @@ -158,6 +168,6 @@ @apply border-border break-keep outline-ring/50; } body { - @apply flex items-center justify-center font-pretendard; + @apply flex items-center justify-center bg-blog-gray-100 font-pretendard; } } From fa90241e76c435f741ee62b8dc9145ddf12f384d Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 18:48:17 +0900 Subject: [PATCH 04/12] =?UTF-8?q?feat(header):=20=ED=97=A4=EB=8D=94=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/components/features/{ => layout}/Header.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename src/shared/components/features/{ => layout}/Header.tsx (88%) diff --git a/src/shared/components/features/Header.tsx b/src/shared/components/features/layout/Header.tsx similarity index 88% rename from src/shared/components/features/Header.tsx rename to src/shared/components/features/layout/Header.tsx index e0e58be..1e4a352 100644 --- a/src/shared/components/features/Header.tsx +++ b/src/shared/components/features/layout/Header.tsx @@ -1,9 +1,9 @@ import Link from 'next/link'; -import { routerPath } from '@/shared/constants'; import { Search, Sun } from 'lucide-react'; -import { Input } from '../ui'; +import { routerPath } from '../../../constants'; +import { Input } from '../../ui'; export const Header = () => { return ( @@ -11,7 +11,7 @@ export const Header = () => {

Dobblog

-
+
Date: Sat, 25 Oct 2025 18:56:51 +0900 Subject: [PATCH 05/12] =?UTF-8?q?feat(post-card):=20=EA=B2=8C=EC=8B=9C?= =?UTF-8?q?=EB=AC=BC=20=EC=B9=B4=EB=93=9C=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/components/features/PostCard.tsx | 29 ---------------- .../components/features/card/PostCard.tsx | 34 +++++++++++++++++++ 2 files changed, 34 insertions(+), 29 deletions(-) delete mode 100644 src/shared/components/features/PostCard.tsx create mode 100644 src/shared/components/features/card/PostCard.tsx diff --git a/src/shared/components/features/PostCard.tsx b/src/shared/components/features/PostCard.tsx deleted file mode 100644 index 6998aae..0000000 --- a/src/shared/components/features/PostCard.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import Image from 'next/image'; - -import { Calendar } from 'lucide-react'; - -export const PostCard = () => { - return ( -
-
- thumbnail -
-
-
-
일상
-
게시물 1 제목제목
-
게시물 1에 대한 내용입니다.
-
-
- -

2025년 1월 14일

-
-
-
- ); -}; diff --git a/src/shared/components/features/card/PostCard.tsx b/src/shared/components/features/card/PostCard.tsx new file mode 100644 index 0000000..5da24e7 --- /dev/null +++ b/src/shared/components/features/card/PostCard.tsx @@ -0,0 +1,34 @@ +import Image from 'next/image'; + +import { CalendarDays } from 'lucide-react'; + +export const PostCard = () => { + return ( +
+
+ thumbnail +
+
+
+
일상
+
게시물 1 제목제목
+
+ 게시물 1에 대한 내용입니다.게시물 1에 대한 내용입니다.게시물 1에 + 대한 내용입니다.게시물 1에 대한 내용입니다. +
+
+
+ +

+ 2025년 1월 14일 +

+
+
+
+ ); +}; From a084e166c7c1fd427f61e036964fff8479467c11 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 18:57:21 +0900 Subject: [PATCH 06/12] =?UTF-8?q?fix(grid):=20grid=20widget=20=EC=9D=98=20?= =?UTF-8?q?=EC=A0=95=EC=9D=98=EB=90=9C=20type=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widgets/grid/Grid.tsx | 60 ++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/src/widgets/grid/Grid.tsx b/src/widgets/grid/Grid.tsx index 2a26d89..04d0eaa 100644 --- a/src/widgets/grid/Grid.tsx +++ b/src/widgets/grid/Grid.tsx @@ -2,49 +2,51 @@ import * as React from 'react'; import { cn } from '@/shared'; -type ResponsiveGrid = Partial<{ - base: number; - sm: number; - md: number; - lg: number; - xl: number; - '2xl': number; -}>; - type Props = { - columns: number | ResponsiveGrid; + cols: string; gap?: number; + maxWidth?: + | 'xs' + | 'sm' + | 'md' + | 'lg' + | 'xl' + | '2xl' + | '3xl' + | '4xl' + | '5xl' + | '6xl' + | '7xl' + | 'full' + | 'none'; + justifyContent?: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'; } & React.HTMLAttributes; export const Grid = ({ children, - columns, - gap = 0, + cols, + gap, + maxWidth, + justifyContent, className, ...props }: Props) => { - const gridColsClass = getGridColsClass(columns); - const gapClass = `gap-[${gap}px]`; - + const gapClass = gap ? `gap-${gap}` : ''; + const maxWidthClass = maxWidth ? `max-w-${maxWidth}` : ''; + const justifyContentClass = justifyContent ? `justify-${justifyContent}` : ''; return (
{children}
); }; - -function getGridColsClass(columns: number | ResponsiveGrid) { - if (typeof columns === 'number') { - return `grid-cols-${columns}`; - } - - return Object.entries(columns) - .map(([breakpoint, count]) => { - const prefix = breakpoint === 'base' ? '' : `${breakpoint}:`; - return `${prefix}grid-cols-${count}`; - }) - .join(' '); -} From 1ec83da441ff1a14f8f3f4b93ad7696fb9886b87 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 19:08:18 +0900 Subject: [PATCH 07/12] =?UTF-8?q?feat(tabs):=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=ED=83=AD=20=EC=9E=84=EC=8B=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/components/features/tabs/Tabs.tsx | 33 ++++++++++++++++++++ src/shared/components/features/tabs/index.ts | 1 + 2 files changed, 34 insertions(+) create mode 100644 src/shared/components/features/tabs/Tabs.tsx create mode 100644 src/shared/components/features/tabs/index.ts diff --git a/src/shared/components/features/tabs/Tabs.tsx b/src/shared/components/features/tabs/Tabs.tsx new file mode 100644 index 0000000..99fbf71 --- /dev/null +++ b/src/shared/components/features/tabs/Tabs.tsx @@ -0,0 +1,33 @@ +'use client'; + +import { useState } from 'react'; + +export const Tabs = () => { + const [selected, setSelected] = useState(0); + + const tabs = [ + { name: 'All.tsx', count: 49 }, + { name: 'Develop.tsx', count: 3 }, + { name: 'Daily.tsx', count: 9 }, + { name: 'Review.tsx', count: 4 }, + ]; + + return ( +
+ {tabs.map((tab, idx) => ( +
setSelected(idx)} + > +

{tab.name}

+

({tab.count})

+
+ ))} +
+ ); +}; diff --git a/src/shared/components/features/tabs/index.ts b/src/shared/components/features/tabs/index.ts new file mode 100644 index 0000000..856dbbb --- /dev/null +++ b/src/shared/components/features/tabs/index.ts @@ -0,0 +1 @@ +export * from './Tabs'; From a89daa2dd1a3a1683ff78c43ecde1f6a5f32a796 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 19:10:23 +0900 Subject: [PATCH 08/12] =?UTF-8?q?feat:=20css=20=ED=83=80=EC=9E=85=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0=EC=9D=84=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EA=B8=80=EB=A1=9C=EB=B2=8C=20=ED=83=80=EC=9E=85=20?= =?UTF-8?q?=EC=84=A0=EC=96=B8=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/types/css.d.ts | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/shared/types/css.d.ts diff --git a/src/shared/types/css.d.ts b/src/shared/types/css.d.ts new file mode 100644 index 0000000..444f793 --- /dev/null +++ b/src/shared/types/css.d.ts @@ -0,0 +1,4 @@ +declare module '*.css' { + const content: { [className: string]: string }; + export default content; +} From e0096b47c9a6dcbbfc5d31f28df476f517ed312e Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 19:10:52 +0900 Subject: [PATCH 09/12] =?UTF-8?q?chore:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=8C=8C=EC=9D=BC=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=20=EB=B0=8F=20export=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/shared/components/features/Footer.tsx | 3 --- src/shared/components/features/card/index.ts | 1 + src/shared/components/features/index.ts | 6 +++--- src/shared/components/features/layout/index.ts | 2 ++ 4 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 src/shared/components/features/Footer.tsx create mode 100644 src/shared/components/features/card/index.ts create mode 100644 src/shared/components/features/layout/index.ts diff --git a/src/shared/components/features/Footer.tsx b/src/shared/components/features/Footer.tsx deleted file mode 100644 index 953e687..0000000 --- a/src/shared/components/features/Footer.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export const Footer = () => { - return
Footer
; -}; diff --git a/src/shared/components/features/card/index.ts b/src/shared/components/features/card/index.ts new file mode 100644 index 0000000..4add1a6 --- /dev/null +++ b/src/shared/components/features/card/index.ts @@ -0,0 +1 @@ +export * from './PostCard'; diff --git a/src/shared/components/features/index.ts b/src/shared/components/features/index.ts index aa8cd93..f66f6d1 100644 --- a/src/shared/components/features/index.ts +++ b/src/shared/components/features/index.ts @@ -1,3 +1,3 @@ -export * from './Header'; -export * from './Footer'; -export * from './PostCard'; +export * from './card'; +export * from './layout'; +export * from './tabs'; diff --git a/src/shared/components/features/layout/index.ts b/src/shared/components/features/layout/index.ts new file mode 100644 index 0000000..3384cbe --- /dev/null +++ b/src/shared/components/features/layout/index.ts @@ -0,0 +1,2 @@ +export * from './Footer'; +export * from './Header'; From fff2dd112f799b0ceb21f08d9b5b479f267661c2 Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 19:19:30 +0900 Subject: [PATCH 10/12] =?UTF-8?q?fix(grid):=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EC=9D=98=20grid=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/page.tsx | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index a054447..d93e154 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,23 +1,31 @@ -import { Button, PostCard } from '@/shared'; +'use client'; + +import { useState } from 'react'; + +import { PostCard, Tabs } from '@/shared'; import { Grid } from '@/widgets'; export default function Home() { + const posts = Array.from({ length: 9 }); // 임시 데이터 + + const [search, setSearch] = useState(''); + + const onChangeSearch = (e: React.ChangeEvent) => { + setSearch(e.target.value); + }; return ( -
-
- - - - -
- - +
+ + + {posts.map((_, index) => ( + + ))}
); From bf8c8843b459a3910110b624293d17dd6b986c1c Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 19:19:40 +0900 Subject: [PATCH 11/12] =?UTF-8?q?fix(eslint):=20'@typescript-eslint/no-unu?= =?UTF-8?q?sed-vars'=20=EA=B7=9C=EC=B9=99=EC=9D=84=20=EA=B2=BD=EA=B3=A0?= =?UTF-8?q?=EB=A1=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eslint.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/eslint.config.mjs b/eslint.config.mjs index 57cc10e..972f06c 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -22,6 +22,7 @@ const eslintConfig = [ 'unused-imports': unusedImports, }, rules: { + '@typescript-eslint/no-unused-vars': 'warn', 'react/jsx-sort-props': [ 'warn', { From 7fb97bf65f85d8d6dfaa5cc5006b23dc9de579cf Mon Sep 17 00:00:00 2001 From: Dobbymin Date: Sat, 25 Oct 2025 19:19:47 +0900 Subject: [PATCH 12/12] =?UTF-8?q?refactor(layout):=20BlogLayout=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EA=B0=9C=EC=84=A0=20=EB=B0=8F=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widgets/layout/BlogLayout.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/widgets/layout/BlogLayout.tsx b/src/widgets/layout/BlogLayout.tsx index 3c0bae0..de764e0 100644 --- a/src/widgets/layout/BlogLayout.tsx +++ b/src/widgets/layout/BlogLayout.tsx @@ -6,10 +6,14 @@ type Props = { export const BlogLayout = ({ children }: Props) => { return ( -
+
-
{children}
-
); };