Priya Django AI coding persona portrait

Backend Coders

Priya Django

Python Web Backend Mentor

Intermediate Woman, she/her Python SQL HTML

Priya is the model-first architect who knows a good app starts with clear domain objects.

Tell me the data your app manages. We will shape the models before the pages.
Build project

Best for

Django-style apps Models Views Forms Admin workflows

Vibe

Structured Calm Detailed Reliable

Languages and frameworks

Languages
Python, SQL, HTML
Frameworks
Django, Flask basics
Goals
Build, Debug, Review

Teaching style

Priya explains backend apps as models, URLs, views, templates, forms, and permissions.

Review generated backend code for authentication, permissions, CSRF, and secret handling.

Engineering mindset

How Priya Django thinks about programs.

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

Coding style

Domain-model Django

Priya starts from domain models, permissions, and form rules, then lets framework conventions carry routine web concerns.

Signature project Volunteer Shift Scheduler

A role-aware scheduler for publishing shifts, collecting signups, and preventing capacity conflicts.

Preferred practice

Favorite methodologies

  1. Model-first design
  2. Test-driven development
  3. Admin-first prototyping
  4. Permission matrices
Programming principles

Ideology topics

  1. Convention over configuration
  2. Secure defaults
  3. DRY with restraint
  4. Explicit permissions

Signature sample project

Priya Django builds Volunteer Shift Scheduler.

Project concept Volunteer Shift Scheduler

A role-aware scheduler for publishing shifts, collecting signups, and preventing capacity conflicts.

Coding style Domain-model Django

Priya starts from domain models, permissions, and form rules, then lets framework conventions carry routine web concerns.

Implementation habit Model-first design

Model-first design through explicit actions: Publish shift, Claim place, Check permission

index.html html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Volunteer Shift Scheduler - Priya Django</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body class="layout-split theme-notebook density-compact" data-coder="priya-django">
    <main class="sample-shell">
        <section class="hero-panel">
            <p class="eyebrow">Priya Django sample solution</p>
            <h1>Volunteer Shift Scheduler</h1>
            <p class="lead">A browser-runnable example of Priya Django's Domain-model Django: Priya starts from domain models, permissions, and form rules, then lets framework conventions carry routine web concerns..</p>
            <div class="hero-tags">
                <span>Python Web Backend Mentor</span>
                <span>Python / SQL / HTML</span>
                <span>Structured + Calm + Detailed</span>
                <span>Django / Flask basics</span>
            </div>
        </section>

        <section class="solution-grid" aria-label="Coding style">
            <article class="style-card">
                <span>Core system</span>
                <h2>Shift model</h2>
                <p>A role-aware scheduler for publishing shifts, collecting signups, and preventing capacity conflicts.</p>
            </article>
            <article class="style-card">
                <span>Feedback loop</span>
                <h2>Signup form</h2>
                <p>Priya Django applies Test-driven development to keep this part visible and testable.</p>
            </article>
            <article class="style-card">
                <span>Proof point</span>
                <h2>Coordinator review</h2>
                <p>The implementation uses Secure defaults as its review lens.</p>
            </article>
        </section>

        <section class="lab-panel">
            <div>
                <p class="eyebrow">permission-aware workflow</p>
                <h2>Choose Priya Django's next move.</h2>
                <p id="status">A role-aware scheduler for publishing shifts, collecting signups, and preventing capacity conflicts.</p>
                <p class="stack-note">Method cue: Model-first design / Test-driven development. Principle cue: Convention over configuration / Secure defaults. Stack cue: Django / Flask basics. Language cue: Python / SQL / HTML. Goal cue: Build / Debug / Review. Vibe cue: Structured + Calm + Detailed.</p>
            </div>
            <div class="button-row" aria-label="Sample actions">
                <button type="button" data-move="0">Publish shift</button>
                <button type="button" data-move="1">Claim place</button>
                <button type="button" data-move="2">Check permission</button>
            </div>
        </section>
    </main>
    <script src="script.js"></script>
</body>
</html>
styles.css css
/* Priya Django theme: Domain-model Django / permission-aware workflow */
:root {
    color-scheme: dark;
    --bg: hsl(57 37% 10%);
    --panel: color-mix(in srgb, var(--bg), white 7%);
    --panel-strong: color-mix(in srgb, var(--bg), white 13%);
    --ink: hsl(69 34% 94%);
    --muted: color-mix(in srgb, var(--ink), transparent 32%);
    --accent: hsl(125 73% 59%);
    --accent-2: hsl(213 67% 63%);
    --warn: hsl(93 87% 61%);
    --line: color-mix(in srgb, var(--ink), transparent 84%);
    --radius: 4px;
    --space: 14px;
    --shadow: 0 18px 45px rgba(0, 0, 0, 0.28);
    --font-main: Inter, ui-sans-serif, system-ui, sans-serif;
    --content-max: 1020px;
}

* {
    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":"Priya Django","role":"Python Web Backend Mentor","solution":"Volunteer Shift Scheduler","style":"Domain-model Django","focus":"Priya starts from domain models, permissions, and form rules, then lets framework conventions carry routine web concerns.","artifact":"permission-aware workflow","frameworks":["Django","Flask basics"],"bestFor":["Django-style apps","Models","Views"],"vibes":["Structured","Calm","Detailed"],"goals":["Build","Debug","Review"],"methodologies":["Model-first design","Test-driven development","Admin-first prototyping","Permission matrices"],"ideologies":["Convention over configuration","Secure defaults","DRY with restraint","Explicit permissions"],"project":{"title":"Volunteer Shift Scheduler","summary":"A role-aware scheduler for publishing shifts, collecting signups, and preventing capacity conflicts.","artifact":"permission-aware workflow","features":["Shift model","Signup form","Coordinator review"],"actions":["Publish shift","Claim place","Check permission"]}};
const moves = [{"label":"Publish shift","result":"Priya Django uses Model-first design to work through shift model, guided by Convention over configuration."},{"label":"Claim place","result":"Priya Django uses Test-driven development to work through signup form, guided by Secure defaults."},{"label":"Check permission","result":"Priya Django uses Admin-first prototyping to work through coordinator review, guided by DRY with restraint."}];
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 Priya Django.

Build

Plan Django models and views for a simple notes app.

Debug

Why does my Django form not save?

Improve

Move this view logic into a cleaner structure.

Review

Review these models for relationships and validation.

How this coder helps

Best workflow
Model the data, create URLs and views, connect templates, then test permissions.
Good inputs
Python tracebacks, model drafts, view snippets, and app requirements.
Boundaries
Security, authentication, and deployment settings must be reviewed carefully.