Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
2d5e994
for setting changed config
seunghyun-24 Jun 26, 2025
1629eeb
add and change image files
seunghyun-24 Jun 26, 2025
ea62395
change color
seunghyun-24 Jun 26, 2025
a614c00
change size
seunghyun-24 Jun 26, 2025
3dff41c
for pages, add ui and lib settings
seunghyun-24 Jun 26, 2025
495576a
change login pages, much prettier
seunghyun-24 Jun 26, 2025
f341d6c
change register pages, much prettier
seunghyun-24 Jun 26, 2025
9b4d996
change main page
seunghyun-24 Jun 26, 2025
76607ec
make Header
seunghyun-24 Jun 26, 2025
5842858
make action bar, it will be used in problem page
seunghyun-24 Jun 26, 2025
49511c8
make Footer
seunghyun-24 Jun 26, 2025
cdea11d
change problem main page
seunghyun-24 Jun 26, 2025
49b8edd
change contest page
seunghyun-24 Jun 26, 2025
93b4f4b
cute duck button, but it will be..... dead
seunghyun-24 Jun 26, 2025
9d093c6
change TACModal, in register page button VIEW
seunghyun-24 Jun 26, 2025
494919a
make table like contest (add shadow)
seunghyun-24 Jun 26, 2025
14b3623
fix change log
seunghyun-24 Jun 26, 2025
4d024b0
fix lint error
seunghyun-24 Jun 26, 2025
e9f3a54
fix ci format
seunghyun-24 Jun 30, 2025
1e0377a
prettier
seunghyun-24 Jun 30, 2025
b66e171
table -> component table
seunghyun-24 Aug 11, 2025
decf6dc
make table components and make data & types
seunghyun-24 Aug 28, 2025
9813b33
mock data
seunghyun-24 Aug 28, 2025
a02b87f
chore: remove Actionbar files from PR
seunghyun-24 Aug 28, 2025
0632e1e
chore: remove duck button files from PR
seunghyun-24 Aug 28, 2025
9373851
chore: remove unnecessary ui files from PR
seunghyun-24 Aug 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
{
"parser": "@typescript-eslint/parser",
"extends": ["eslint:recommended", "next", "next/core-web-vitals", "prettier", "plugin:@typescript-eslint/recommended"],
"extends": [
"eslint:recommended",
"next",
"next/core-web-vitals",
"prettier",
"plugin:@typescript-eslint/recommended"
],
"rules": {
"prefer-const": "warn",
"no-undef": "off",
Expand All @@ -16,4 +22,4 @@
"@next/next/no-img-element": "off",
"@typescript-eslint/no-empty-interface": "off"
}
}
}
3 changes: 1 addition & 2 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ about: Provide guideline for a new PR
title: ''
labels: ''
assignees: plzfday

---

## What is this feature?
Expand All @@ -13,6 +12,6 @@ assignees: plzfday

## Task Details

- [ ]
- [ ]

## Reference Materials (Optional)
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ jobs:
run: yarn run lint

- name: Run prettier
run: yarn run prettier
run: yarn run prettier:check
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts

1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# bibimbap-frontend

The frontend of Bibimbap

This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
Expand Down
1 change: 1 addition & 0 deletions __tests__/pages/landing.test.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import '@testing-library/jest-dom';
import { render, screen } from '@testing-library/react';

import Home from '@/app/page';

it('renders 6 change logs', () => {
Expand Down
21 changes: 21 additions & 0 deletions components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "tailwind.config.ts",
"css": "src/app/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
},
"iconLibrary": "lucide"
}
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"start": "next start",
"lint": "next lint",
"prettier": "npx prettier --config ./.prettierrc --write **/*.{ts,tsx}",
"prettier:check": "npx prettier --config ./.prettierrc --check **/*.{ts,tsx}",
"test": "jest",
"test:watch": "jest --watch"
},
Expand Down
Binary file added public/duck.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
95 changes: 95 additions & 0 deletions src/app/contests/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
'use client';

import React from 'react';
import { Plus, Trophy } from 'lucide-react';

import ContestTable, { Contest } from '@/components/ContestTable';
import contestsData from '@/data/contestsData';
import { Checkbox } from '@/components/ui/checkbox';
import { Button } from '@/components/ui/button';
import ContestCards from '@/components/ContestCards';
import Footer from '@/components/Footer';

export default function ContestsPage() {
const [contests, setContests] = React.useState<Contest[]>(contestsData);

const [favoriteOnly, setFavoriteOnly] = React.useState(false);

const onClickFavorite = (id: Contest['id']) => {
setContests((prev) =>
prev.map((c) => (c.id === id ? { ...c, isFavorite: !c.isFavorite } : c)),
);
};

const filteredContests = React.useMemo(
() => (favoriteOnly ? contests.filter((p) => p.isFavorite) : contests),
[contests, favoriteOnly],
);

const onEnter = (id: Contest['id']) => {
// TODO: enter the contest/{id} detail edit page
console.log('enter', id);
};

const onDelete = (id: Contest['id']) => {
// TODO: delete the contest/{id} immediately
const ok = window.confirm('Are you sure you want to delete this?');
if (!ok) return;
setContests((prev) => prev.filter((c) => c.id !== id));
};

return (
<div className='min-h-screen bg-gradient-to-br from-gray-50 to-gray-100'>
<div className='container px-4 py-6 mx-auto'>
<div className='flex items-center justify-between mb-6'>
<div>
<h1 className='text-3xl font-bold text-gray-900 flex items-center gap-3'>
Comment on lines +42 to +46
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

src/app/problems/page.tsx의 41번 라인부터 45번 라인까지 똑같은 css 코드가 있어서, 이런 부분은 나중에 찾아서 공통으로 묶어서 리팩토링 하면 좋을 것 같아요

/* globals.css */
.page-background {
  @apply min-h-screen bg-gradient-to-br from-gray-50 to-gray-100
}

.page-container {
  @apply container px-4 py-6 mx-auto;
}

.page-header {
  @apply flex items-center justify-between mb-6;
}

.page-title {
  @apply text-3xl font-bold text-gray-900 flex items-center gap-3;
}

.page-title-icon {
  @apply h-8 w-8 text-primary;
}

<Trophy className='h-8 w-8 text-primary' />
Contests
</h1>
<p className='text-gray-600 mt-1'>
{filteredContests.length} contests available
</p>
</div>
<div className='flex items-center gap-4'>
<div className='flex items-center gap-2'>
<Checkbox
id='favorites'
checked={favoriteOnly}
onCheckedChange={(v) => setFavoriteOnly(Boolean(v))}
aria-controls='contests-table'
/>
<label htmlFor='favorites' className='text-sm cursor-pointer'>
Only favorite
</label>
</div>
{/* TODO: get user-info, and add filter function and onClick state */}
<div className='flex items-center gap-2'>
<Checkbox id='activity' />
<label htmlFor='activity' className='text-sm'>
Only my activity
</label>
</div>
<Button
onClick={() => console.log('Creating new contests!')}
className='inline-flex flex-row flex-nowrap items-center gap-2 whitespace-nowrap leading-none
bg-amber-400 hover:bg-amber-500 text-white px-4 py-2 h-auto rounded-xl shadow'
>
<Plus className='h-4 w-4 shrink-0' />
<span className='font-medium inline-block'>Create Contest</span>
</Button>
</div>
</div>

<ContestTable
contests={filteredContests}
onClickFavorite={onClickFavorite}
onEnter={onEnter}
onDelete={onDelete}
/>
<ContestCards contests={filteredContests} />
</div>
<Footer />
</div>
);
}
60 changes: 60 additions & 0 deletions src/app/globals.css
Original file line number Diff line number Diff line change
@@ -1,3 +1,63 @@
@import url('https://fonts.googleapis.com/css2?family=Baloo+2:wght@600&display=swap');

@layer base {
:root {
--font-logo: 'Baloo 2', sans-serif;
}
}

@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
:root {
--font-logo: 'Baloo 2', sans-serif;
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
/* --primary: 36 100% 50%; */
--primary: 45 100% 60%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
/* --ring: 36 100% 50%; */
--ring: 45 100% 60%;
--radius: 0.5rem;
}

.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
--primary: 45 100% 60%;
--primary-foreground: 222.2 47.4% 11.2%;
/* --primary: 36 100% 50%; */
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
/* --ring: 36 100% 50%; */
--ring: 45 100% 60%;
}
}
12 changes: 7 additions & 5 deletions src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ import { Container, ThemeProvider } from '@mui/material';
import theme from '../theme';

import './globals.css';
import Navigation from '@/components/Navigation';
// import Navigation from '@/components/Navigation';
import Header from '@/components/Header';

export const metadata: Metadata = {
title: 'Bibimbap',
description: 'A delicious Korean dish',
title: 'coduck',
description: 'coduck~',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분은 아직 placeholder로 두고 나중에 수정 되는 부분인 거죠?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그렇습니다 이름 바꾸고 적절한 수정이 프론트딴에선 안들어가서 일단 임시 확인차..
적절한 멘트 (누군가가) 수정해야할 듯 합니다
지금보니 이 브랜치에서 할 내용은 아니었던듯 싶네요

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

우선은 coduck으로 남겨둬도 괜찮을 것 같긴 해요

다만 package.json에서는 아직 bibimbap-frontend라고 되어 있어서 아직 불일치가 존재하는 것 같아요. README.md, LICENSE에서도 비슷한 이슈가 존재하고 있어요

{
  "name": "bibimbap-frontend",
  "version": "0.1.0",
  "private": true,

};

export default function RootLayout({
Expand All @@ -22,8 +23,9 @@ export default function RootLayout({
<body>
<AppRouterCacheProvider>
<ThemeProvider theme={theme}>
<Container component='main'>
<Navigation />
<Container component='main' maxWidth={false} disableGutters>
{/* <Navigation /> */}
<Header />
{children}
</Container>
</ThemeProvider>
Expand Down
Loading