158 lines
6.3 KiB
HTML
158 lines
6.3 KiB
HTML
<!doctype html>
|
|
<html lang="ko">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>Tutor Platform</title>
|
|
<link rel="stylesheet" href="/assets/styles.css" />
|
|
</head>
|
|
<body>
|
|
<script src="https://accounts.google.com/gsi/client" async defer></script>
|
|
<main class="workspace">
|
|
<aside class="setup-pane" aria-label="Diagnostic setup">
|
|
<p class="eyebrow">Tutor Platform</p>
|
|
<h1>Interview practice</h1>
|
|
<p class="lede">Start a focused backend interview loop and turn one answer into evidence.</p>
|
|
|
|
<div id="auth-area" class="auth-area">
|
|
<div id="g_id_onload" data-client_id="13671390758-bp1ed6psn43bl86r8a9kv81o40nkea90.apps.googleusercontent.com" data-callback="handleCredentialResponse"></div>
|
|
<div class="g_id_signin" data-type="standard"></div>
|
|
<div id="user-info" class="user-info" style="display:none;"></div>
|
|
<button id="logout-button" class="small-button" type="button" style="display:none;">Sign out</button>
|
|
</div>
|
|
|
|
<form id="session-form" class="stacked-form">
|
|
<label>
|
|
User ID
|
|
<input id="user-id" name="user_id" value="demo-user" autocomplete="off" />
|
|
</label>
|
|
<label>
|
|
Target role
|
|
<input id="target-role" name="target_role" value="junior backend developer" />
|
|
</label>
|
|
<label>
|
|
Stack
|
|
<input id="stack" name="stack" value="go, postgres" />
|
|
</label>
|
|
<label>
|
|
Timeline
|
|
<input id="timeline" name="interview_timeline" value="30 days" />
|
|
</label>
|
|
<button id="start-button" type="submit">
|
|
<span class="btn-text">Start diagnostic</span>
|
|
<span class="btn-spinner" aria-hidden="true"></span>
|
|
</button>
|
|
</form>
|
|
|
|
<p id="status-line" class="status-line" role="status">
|
|
<span class="status-icon" aria-hidden="true"></span>
|
|
<span class="status-text">Ready</span>
|
|
</p>
|
|
<p id="error-line" class="error-line" role="alert"></p>
|
|
</aside>
|
|
|
|
<section class="practice-pane" aria-label="Diagnostic practice">
|
|
<div class="section-heading">
|
|
<div>
|
|
<p class="eyebrow">Diagnostic</p>
|
|
<h2 id="session-title">No active session</h2>
|
|
</div>
|
|
</div>
|
|
<div id="questions" class="question-list empty-state">
|
|
<span class="empty-hint">Start a diagnostic session to load interview questions.</span>
|
|
</div>
|
|
|
|
<form id="answer-form" class="answer-form">
|
|
<label for="answer-text">Answer</label>
|
|
<textarea id="answer-text" rows="7" placeholder="Select a question, then answer with concrete production reasoning."></textarea>
|
|
<button id="answer-button" type="submit" disabled>
|
|
<span class="btn-text">Submit answer</span>
|
|
<span class="btn-spinner" aria-hidden="true"></span>
|
|
</button>
|
|
</form>
|
|
|
|
<section class="content-workspace" aria-label="Material and asset workspace">
|
|
<div class="section-heading">
|
|
<div>
|
|
<p class="eyebrow">Content operations</p>
|
|
<h2>Source to asset prompt</h2>
|
|
</div>
|
|
</div>
|
|
|
|
<form id="material-form" class="material-form">
|
|
<label>
|
|
Material title
|
|
<input id="material-title" value="Backend interview notes" />
|
|
</label>
|
|
<label>
|
|
Source type
|
|
<input id="material-source" value="markdown" />
|
|
</label>
|
|
<label class="wide-field">
|
|
Source material
|
|
<textarea id="material-body" rows="5">Idempotent API retries need transactions. Cache invalidation uses TTL tradeoffs and database indexes support query plans.</textarea>
|
|
</label>
|
|
<button id="material-button" type="submit">
|
|
<span class="btn-text">Ingest material</span>
|
|
<span class="btn-spinner" aria-hidden="true"></span>
|
|
</button>
|
|
</form>
|
|
|
|
<div id="ontology" class="ontology-view empty-state">
|
|
<span class="empty-hint">Ingest material to inspect ontology candidates.</span>
|
|
</div>
|
|
|
|
<form id="asset-form" class="asset-form">
|
|
<label>
|
|
Concept
|
|
<select id="asset-concept" disabled>
|
|
<option value="">Select a concept</option>
|
|
</select>
|
|
</label>
|
|
<label>
|
|
Asset type
|
|
<select id="asset-type">
|
|
<option value="diagram">Diagram</option>
|
|
<option value="lesson_slice">Lesson slice</option>
|
|
<option value="worksheet">Worksheet</option>
|
|
<option value="interview_card">Interview card</option>
|
|
</select>
|
|
</label>
|
|
<button id="asset-button" type="submit" disabled>
|
|
<span class="btn-text">Generate prompt</span>
|
|
<span class="btn-spinner" aria-hidden="true"></span>
|
|
</button>
|
|
</form>
|
|
|
|
<div id="asset-output" class="ontology-view empty-state">
|
|
<span class="empty-hint">Generate a prompt to inspect model key, review state, and evidence.</span>
|
|
</div>
|
|
</section>
|
|
</section>
|
|
|
|
<aside class="feedback-pane" aria-label="Feedback">
|
|
<div class="section-heading">
|
|
<div>
|
|
<p class="eyebrow">Feedback</p>
|
|
<h2>Rubric result</h2>
|
|
</div>
|
|
</div>
|
|
<div id="feedback" class="feedback empty-state">
|
|
<span class="empty-hint">Submit an answer to see grade, evidence, and follow-up.</span>
|
|
</div>
|
|
<div class="section-heading progress-heading">
|
|
<div>
|
|
<p class="eyebrow">Progress</p>
|
|
<h2>Learning state</h2>
|
|
</div>
|
|
<button id="refresh-progress" class="small-button" type="button" disabled>Refresh</button>
|
|
</div>
|
|
<div id="progress" class="feedback empty-state">
|
|
<span class="empty-hint">Answer once to update learner memory and readiness.</span>
|
|
</div>
|
|
</aside>
|
|
</main>
|
|
<script src="/assets/app.js" type="module"></script>
|
|
</body>
|
|
</html>
|