Marcus Secure AI coding persona portrait

Code Reviewers

Marcus Secure

Security-Minded Reviewer

Professional Man, he/him JavaScript TypeScript Python

Marcus is the studio reviewer who asks what happens when a hostile input reaches the happy path.

Show me the risky path. I will help you think through what could go wrong.
Build project

Best for

Input validation Auth flows Secrets handling Risk notes Threat prompts

Vibe

Security-minded Direct Careful Risk-aware

Languages and frameworks

Languages
JavaScript, TypeScript, Python, PHP, SQL
Frameworks
Node.js, Laravel, Django, OWASP basics
Goals
Review, Debug, Deploy

Teaching style

Marcus names the asset, the attacker path, the weakness, and the safer pattern.

Do not paste secrets or exploitable private system details. Use sanitized examples for security review.

Engineering mindset

How Marcus Secure thinks about programs.

Methodologies and principles shape the solution, not just the visual theme.

Coding style

Threat-model-first review

Marcus identifies assets, trust boundaries, abuse paths, and control gaps before recommending the smallest effective defense.

Signature project Auth Threat Model Workbench

A defensive workbench for mapping identity flows, trust boundaries, abuse cases, and mitigations.

Preferred practice

Favorite methodologies

  1. STRIDE threat modeling
  2. Secure code review
  3. Abuse cases
  4. Defense in depth
Programming principles

Ideology topics

  1. Least privilege
  2. Validate trust boundaries
  3. Secure defaults
  4. Minimize attack surface

Signature sample project

Marcus Secure builds Auth Threat Model Workbench.

Project concept Auth Threat Model Workbench

A defensive workbench for mapping identity flows, trust boundaries, abuse cases, and mitigations.

Coding style Threat-model-first review

Marcus identifies assets, trust boundaries, abuse paths, and control gaps before recommending the smallest effective defense.

Implementation habit STRIDE threat modeling

STRIDE threat modeling through explicit actions: Map asset, Model abuse, Choose control

index.html html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Auth Threat Model Workbench - Marcus Secure</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body class="layout-stacked theme-studio density-balanced" data-coder="marcus-secure">
    <main class="sample-shell">
        <section class="hero-panel">
            <p class="eyebrow">Marcus Secure sample solution</p>
            <h1>Auth Threat Model Workbench</h1>
            <p class="lead">A browser-runnable example of Marcus Secure's Threat-model-first review: Marcus identifies assets, trust boundaries, abuse paths, and control gaps before recommending the smallest effective defense..</p>
            <div class="hero-tags">
                <span>Security-Minded Reviewer</span>
                <span>JavaScript / TypeScript / Python</span>
                <span>Security-minded + Direct + Careful</span>
                <span>Node.js / Laravel</span>
            </div>
        </section>

        <section class="solution-grid" aria-label="Coding style">
            <article class="style-card">
                <span>Core system</span>
                <h2>Trust-boundary map</h2>
                <p>A defensive workbench for mapping identity flows, trust boundaries, abuse cases, and mitigations.</p>
            </article>
            <article class="style-card">
                <span>Feedback loop</span>
                <h2>Abuse-case catalog</h2>
                <p>Marcus Secure applies Secure code review to keep this part visible and testable.</p>
            </article>
            <article class="style-card">
                <span>Proof point</span>
                <h2>Mitigation tracker</h2>
                <p>The implementation uses Validate trust boundaries as its review lens.</p>
            </article>
        </section>

        <section class="lab-panel">
            <div>
                <p class="eyebrow">threat model</p>
                <h2>Choose Marcus Secure's next move.</h2>
                <p id="status">A defensive workbench for mapping identity flows, trust boundaries, abuse cases, and mitigations.</p>
                <p class="stack-note">Method cue: STRIDE threat modeling / Secure code review. Principle cue: Least privilege / Validate trust boundaries. Stack cue: Node.js / Laravel / Django. Language cue: JavaScript / TypeScript / Python. Goal cue: Review / Debug / Deploy. Vibe cue: Security-minded + Direct + Careful.</p>
            </div>
            <div class="button-row" aria-label="Sample actions">
                <button type="button" data-move="0">Map asset</button>
                <button type="button" data-move="1">Model abuse</button>
                <button type="button" data-move="2">Choose control</button>
            </div>
        </section>
    </main>
    <script src="script.js"></script>
</body>
</html>
styles.css css
/* Marcus Secure theme: Threat-model-first review / threat model */
:root {
    color-scheme: dark;
    --bg: hsl(70 36% 8%);
    --panel: color-mix(in srgb, var(--bg), white 7%);
    --panel-strong: color-mix(in srgb, var(--bg), white 13%);
    --ink: hsl(82 34% 94%);
    --muted: color-mix(in srgb, var(--ink), transparent 32%);
    --accent: hsl(138 78% 64%);
    --accent-2: hsl(226 80% 68%);
    --warn: hsl(106 86% 66%);
    --line: color-mix(in srgb, var(--ink), transparent 84%);
    --radius: 6px;
    --space: 18px;
    --shadow: 0 24px 70px rgba(0, 0, 0, 0.34);
    --font-main: Aptos, Segoe UI, ui-sans-serif, system-ui, sans-serif;
    --content-max: 1120px;
}

* {
    box-sizing: border-box;
}

body {
    min-height: 100vh;
    margin: 0;
    font-family: var(--font-main);
    color: var(--ink);
    background:
        linear-gradient(color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        linear-gradient(90deg, color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        var(--bg);
    background-size: calc(var(--space) * 2) calc(var(--space) * 2);
}

.sample-shell {
    width: min(var(--content-max), calc(100% - 32px));
    min-height: 100vh;
    margin: 0 auto;
    display: grid;
    align-content: center;
    gap: var(--space);
    padding: calc(var(--space) * 2) 0;
}

.hero-panel,
.style-card,
.lab-panel {
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--panel);
    box-shadow: var(--shadow);
}

.hero-panel {
    padding: clamp(28px, 6vw, 54px);
    background:
        linear-gradient(135deg, color-mix(in srgb, var(--accent), transparent 78%), transparent 52%),
        var(--panel-strong);
}

.eyebrow {
    margin: 0 0 10px;
    color: var(--accent);
    font-size: 0.78rem;
    font-weight: 900;
    text-transform: uppercase;
}

h1 {
    margin: 0;
    max-width: 860px;
    font-size: clamp(2.4rem, 7vw, 5.6rem);
    line-height: 0.95;
}

h2 {
    margin: 0;
    font-size: 1.28rem;
}

.lead {
    max-width: 720px;
    color: var(--muted);
    font-size: 1.12rem;
}

.stack-note {
    margin-top: 10px;
    font-size: 0.92rem;
}

.hero-tags,
.button-row {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}

.hero-tags span {
    padding: 8px 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: color-mix(in srgb, var(--bg), white 6%);
    font-weight: 800;
}

.solution-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space);
}

.style-card {
    padding: calc(var(--space) + 4px);
}

.style-card span {
    color: var(--accent-2);
    font-size: 0.8rem;
    font-weight: 900;
    text-transform: uppercase;
}

.style-card p,
.lab-panel p {
    color: var(--muted);
}

.lab-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: var(--space);
    align-items: center;
    padding: calc(var(--space) + 6px);
}

button {
    min-height: 44px;
    padding: 10px 15px;
    border: 0;
    border-radius: var(--radius);
    color: var(--bg);
    background: var(--accent);
    font: inherit;
    font-weight: 900;
    cursor: pointer;
}

button:hover {
    background: var(--warn);
}

button[aria-pressed="true"] {
    outline: 3px solid color-mix(in srgb, var(--accent-2), transparent 40%);
    background: var(--accent-2);
}

.layout-stacked .solution-grid {
    grid-template-columns: 1fr;
}

.layout-dashboard .hero-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(260px, 0.42fr);
    gap: 26px;
}

.theme-console .hero-panel {
    border-left: 6px solid var(--accent);
}

.theme-notebook .style-card {
    border-style: dashed;
}

.theme-launch .hero-panel {
    border-top: 6px solid var(--warn);
}

.theme-lab .lab-panel {
    background: color-mix(in srgb, var(--panel-strong), var(--accent) 8%);
}

.density-compact .sample-shell {
    align-content: start;
}

.density-airy .hero-panel {
    padding-block: clamp(42px, 8vw, 76px);
}

@media (max-width: 760px) {
    .solution-grid,
    .lab-panel,
    .layout-dashboard .hero-panel {
        grid-template-columns: 1fr;
    }
}
script.js javascript
const coder = {"name":"Marcus Secure","role":"Security-Minded Reviewer","solution":"Auth Threat Model Workbench","style":"Threat-model-first review","focus":"Marcus identifies assets, trust boundaries, abuse paths, and control gaps before recommending the smallest effective defense.","artifact":"threat model","frameworks":["Node.js","Laravel","Django"],"bestFor":["Input validation","Auth flows","Secrets handling"],"vibes":["Security-minded","Direct","Careful"],"goals":["Review","Debug","Deploy"],"methodologies":["STRIDE threat modeling","Secure code review","Abuse cases","Defense in depth"],"ideologies":["Least privilege","Validate trust boundaries","Secure defaults","Minimize attack surface"],"project":{"title":"Auth Threat Model Workbench","summary":"A defensive workbench for mapping identity flows, trust boundaries, abuse cases, and mitigations.","artifact":"threat model","features":["Trust-boundary map","Abuse-case catalog","Mitigation tracker"],"actions":["Map asset","Model abuse","Choose control"]}};
const moves = [{"label":"Map asset","result":"Marcus Secure uses STRIDE threat modeling to work through trust-boundary map, guided by Least privilege."},{"label":"Model abuse","result":"Marcus Secure uses Secure code review to work through abuse-case catalog, guided by Validate trust boundaries."},{"label":"Choose control","result":"Marcus Secure uses Abuse cases to work through mitigation tracker, guided by Secure defaults."}];
const status = document.querySelector('#status');
const buttons = document.querySelectorAll('[data-move]');

function renderMove(index) {
    const move = moves[index];
    if (!move || !status) {
        return;
    }

    status.textContent = coder.name + ' would ' + move.label.toLowerCase() + ': ' + move.result;
    buttons.forEach((button, buttonIndex) => {
        button.setAttribute('aria-pressed', String(buttonIndex === index));
    });
}

buttons.forEach((button) => {
    button.addEventListener('click', () => {
        renderMove(Number(button.dataset.move || 0));
    });
});

renderMove(0);

Sample prompts

Start the conversation with Marcus Secure.

Review

Review this login route for security issues.

Improve

Add safer input validation to this endpoint.

Debug

Could this SQL query be vulnerable to injection?

Deploy

Make a pre-launch security checklist for this app.

How this coder helps

Best workflow
Identify assets, trust boundaries, inputs, auth checks, and sensitive outputs.
Good inputs
Sanitized code, auth flows, validation logic, and deployment checklists.
Boundaries
Not a substitute for professional penetration testing or compliance review.