Skip to content

RELEASE-20260719#206

Merged
alsgud8311 merged 10 commits into
mainfrom
development
Jul 19, 2026
Merged

RELEASE-20260719#206
alsgud8311 merged 10 commits into
mainfrom
development

Conversation

@alsgud8311

Copy link
Copy Markdown
Contributor

RELEASE-20260719

alsgud8311 added 10 commits May 25, 2026 18:05
- Introduced a new user interview markdown file for gathering user feedback.
- Added a PostingPopup component to display the user interview announcement.
- Enhanced existing components to support rendering of interview questions and answers with markdown parsing capabilities.
- Added a new kokomen personality image to the public assets.
- Updated PostingPopup component usage to be included in the interview result page while removing it from the main app layout.
- Introduced a new InterviewExitButton component to allow users to exit the interview with a confirmation modal.
- Updated the InterviewPage to include the InterviewExitButton for improved user navigation.
- Modified toast notifications in resume context to enhance user feedback during evaluation and interview processes.
@alsgud8311
alsgud8311 merged commit ed05e7e into main Jul 19, 2026
5 of 7 checks passed
@github-actions

Copy link
Copy Markdown

🛠️ Build Summary

Status: ✅ SUCCESS
Duration: 62초
Exit Code: 0
Commit: 1438d43

📋 Build Output (마지막 45줄)

├ ƒ /api/auth/logout                           0 B         382 kB
├ ƒ /dashboard                             12.9 kB         762 kB
├ ƒ /interviews                            6.68 kB         401 kB
├ ƒ /interviews/[interviewId]                11 kB         724 kB
├ ƒ /interviews/[interviewId]/result       6.82 kB         418 kB
├ ○ /layout (1415 ms)                        546 B         382 kB
├   └ css/2af4d3721e97fa9b.css               280 B
├ ƒ /login                                 2.73 kB         387 kB
├ ƒ /login/callback                         2.8 kB         387 kB
├ ƒ /login/google/callback                 2.79 kB         387 kB
├ ƒ /login/profile                         5.53 kB         419 kB
├ ƒ /members/[memberId]                    4.82 kB         392 kB
├ ƒ /members/[memberId]/sitemap.xml          431 B         382 kB
├ ƒ /members/interviews/[interviewId]      4.06 kB         393 kB
├ ƒ /purchase                              7.86 kB         752 kB
├ ƒ /purchase/confirm                      2.46 kB         386 kB
├ ○ /purchase/error (1415 ms)                802 B         385 kB
├ ƒ /rank                                  4.18 kB         392 kB
├ ƒ /recruit                               6.99 kB         398 kB
├ ƒ /resume                                1.78 kB         495 kB
├ ƒ /resume/eval                           4.66 kB         392 kB
├ ƒ /resume/eval/[evaluationId]/result     3.79 kB         493 kB
├ ƒ /resume/eval/demo                      3.58 kB         497 kB
├ ƒ /resume/interview                      6.26 kB         420 kB
├ ƒ /resume/interview/[interviewId]        4.58 kB         392 kB
├ ƒ /server-sitemap.xml                      423 B         382 kB
├ ƒ /sitemap/rank.xml                        424 B         382 kB
├ ƒ /terms/privacy                         6.04 kB         390 kB
└ ƒ /terms/termsofuse                      5.88 kB         390 kB
+ First Load JS shared by all               399 kB
  ├ chunks/framework-146ad2adbcf61295.js   57.7 kB
  ├ chunks/main-98ffb978ee2c190b.js         177 kB
  ├ chunks/pages/_app-e6cc3f8c3f6f626b.js   145 kB
  ├ css/9055b4dba4b80273.css               16.8 kB
  └ other shared chunks (total)            2.61 kB

ƒ Middleware                               96.2 kB

○  (Static)   prerendered as static content
ƒ  (Dynamic)  server-rendered on demand

   Memory usage report:
    - Total time spent in GC: 399.93ms
    - Peak heap usage: 64.58 MB
    - Peak RSS usage: 727.65 MB

🤖 Generated by GitHub Actions at Sun Jul 19 07:49:31 UTC 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a Live Coding feature to the interview process, adding a Monaco-based code editor, markdown problem rendering, and interactive 3D elements to the interview interface. It also refactors answer submission into a reusable hook, replaces custom animated overlays with toast notifications, and adds an exit button. Feedback highlights a bug where the original coding problem is lost on page refresh, and recommends removing a debug console.log of sensitive data. Additionally, missing dependencies in useEffect hooks should be resolved to prevent stale closures, mktemp should be used in the deployment script to avoid file conflicts, and the exit button should redirect to a safe route instead of relying solely on router.back().

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment on lines +178 to +188
// CODE 면접의 원본 문제(첫 root question)를 한 번만 캡처
const originalProblemRef = useRef<string>("");
if (
isLiveCoding &&
!originalProblemRef.current &&
data &&
data.prev_questions_and_answers.length === 0 &&
isTextInterview(data)
) {
originalProblemRef.current = data.cur_question;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

high

If the user refreshes the page mid-interview (when prev_questions_and_answers.length > 0), originalProblemRef.current is never initialized because of the strict data.prev_questions_and_answers.length === 0 check. This causes the original coding problem description to be lost on reload. We should fallback to the first question in prev_questions_and_answers if the interview has already started.

  // CODE 면접의 원본 문제(첫 root question)를 한 번만 캡처
  const originalProblemRef = useRef<string>("");
  if (isLiveCoding && !originalProblemRef.current && data) {
    if (data.prev_questions_and_answers.length === 0 && isTextInterview(data)) {
      originalProblemRef.current = data.cur_question;
    } else if (data.prev_questions_and_answers.length > 0) {
      originalProblemRef.current = data.prev_questions_and_answers[0].question;
    }
  }

Comment on lines 149 to 154
.then((res) => res.data)
.then((res) => {
console.log("resume evaluation result", JSON.stringify(res));
return res;
})
.then(mapToCamelCase);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Avoid leaving debug console.log statements in production code, especially when they serialize and print potentially sensitive resume data using JSON.stringify.

    .then((res) => res.data)
    .then(mapToCamelCase);

Comment on lines +102 to +103
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [interviewState]);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The useEffect hook omits interviewResultId, router, and toast from its dependency array, and uses // eslint-disable-next-line react-hooks/exhaustive-deps to suppress the warning. This can lead to stale closures where interviewResultId is stale when the user clicks the action button. It is safer to include all dependencies.

  }, [interviewState, interviewResultId, router, toast]);

Comment on lines +91 to +92
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [reportState]);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The useEffect hook omits evaluationId, router, and toast from its dependency array. To prevent potential stale closure bugs, please include all referenced variables in the dependency array.

  }, [reportState, evaluationId, router, toast]);

Comment on lines +74 to +76
sed "s/CLIENT_BACKEND/$NEW_CONTAINER/g" "$REMAP_TMPL" > /tmp/remap.config
docker cp /tmp/remap.config kokomen-ats:/opt/etc/trafficserver/remap.config
rm -f /tmp/remap.config

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Using a hardcoded temporary file path like /tmp/remap.config can lead to conflicts or permission issues if multiple deployments run concurrently or if the file was previously created by another user. Using mktemp is a safer and more robust approach.

Suggested change
sed "s/CLIENT_BACKEND/$NEW_CONTAINER/g" "$REMAP_TMPL" > /tmp/remap.config
docker cp /tmp/remap.config kokomen-ats:/opt/etc/trafficserver/remap.config
rm -f /tmp/remap.config
REMAP_TMP=$(mktemp)
sed "s/CLIENT_BACKEND/$NEW_CONTAINER/g" "$REMAP_TMPL" > "$REMAP_TMP"
docker cp "$REMAP_TMP" kokomen-ats:/opt/etc/trafficserver/remap.config
rm -f "$REMAP_TMP"

Comment on lines +11 to +14
const handleExit = (): void => {
closeModal();
router.back();
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Relying solely on router.back() to exit the interview can lead to unexpected behavior (e.g., exiting the site entirely or doing nothing) if the user landed directly on the page. It is safer to redirect to a known safe route (like / or /interviews).

Suggested change
const handleExit = (): void => {
closeModal();
router.back();
};
const handleExit = (): void => {
closeModal();
router.push("/");
};

@github-actions

Copy link
Copy Markdown

🚀 Lighthouse Report for TEST1

📅 Date: 7/19/2026

Category Score
🟠 Performance 50
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 1.0 s
🔴 Largest Contentful Paint 45 4.2 s
🟢 Cumulative Layout Shift 100 0

🚀 Lighthouse Report for TEST2

📅 Date: 7/19/2026

Category Score
🟠 Performance 60
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 0.9 s
🟠 Largest Contentful Paint 67 3.4 s
🟢 Cumulative Layout Shift 100 0

🚀 Lighthouse Report for TEST3

📅 Date: 7/19/2026

Category Score
🟠 Performance 64
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 0.9 s
🟠 Largest Contentful Paint 72 3.2 s
🟢 Cumulative Layout Shift 100 0

🚀 Lighthouse Report for TEST4

📅 Date: 7/19/2026

Category Score
🟠 Performance 73
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 0.9 s
🟠 Largest Contentful Paint 71 3.2 s
🟢 Cumulative Layout Shift 100 0

🚀 Lighthouse Report for TEST5

📅 Date: 7/19/2026

Category Score
🟠 Performance 68
🟢 Accessibility 96
🟠 Best Practices 75
🟢 SEO 100

📊 Performance Details

Metric Score Value
🟢 First Contentful Paint 100 0.9 s
🟠 Largest Contentful Paint 69 3.3 s
🟢 Cumulative Layout Shift 100 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant