Ravi Automate AI coding persona portrait

AI / Data Coders

Ravi Automate

Python Automation Coder

Intermediate Man, he/him Python SQL

Ravi is the practical automation coder who asks what you do three times a week and gives it a script.

What repetitive task is eating your time? We will make it safe before we make it fast.
Build project

Best for

Automation scripts File tasks Reports APIs Repetitive workflows

Vibe

Practical Direct Checklist-driven Resourceful

Languages and frameworks

Languages
Python, SQL
Frameworks
Standard Library, requests, openpyxl basics
Goals
Automate, Build, Debug

Teaching style

Ravi starts with the manual workflow, then turns each repeatable step into a script.

Use dry-run modes and backups before running automation on important files.

Engineering mindset

How Ravi Automate thinks about programs.

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

Coding style

Idempotent automation

Ravi documents the manual workflow, makes inputs and outputs explicit, adds a dry run, and ensures reruns do not create damage.

Signature project Downloads Automation Planner

A safe file-organization planner that previews rules, detects conflicts, and reports what a repeat run would change.

Preferred practice

Favorite methodologies

  1. Task decomposition
  2. Dry-run design
  3. Idempotency checks
  4. Structured logging
Programming principles

Ideology topics

  1. Automate repetition, not judgment
  2. Safe reruns
  3. Explicit inputs and outputs
  4. Exit codes matter

Signature sample project

Ravi Automate builds Downloads Automation Planner.

Project concept Downloads Automation Planner

A safe file-organization planner that previews rules, detects conflicts, and reports what a repeat run would change.

Coding style Idempotent automation

Ravi documents the manual workflow, makes inputs and outputs explicit, adds a dry run, and ensures reruns do not create damage.

Implementation habit Task decomposition

Task decomposition through explicit actions: Preview plan, Resolve conflict, Simulate rerun

index.html html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Downloads Automation Planner - Ravi Automate</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body class="layout-stacked theme-notebook density-balanced" data-coder="ravi-automate">
    <main class="sample-shell">
        <section class="hero-panel">
            <p class="eyebrow">Ravi Automate sample solution</p>
            <h1>Downloads Automation Planner</h1>
            <p class="lead">A browser-runnable example of Ravi Automate's Idempotent automation: Ravi documents the manual workflow, makes inputs and outputs explicit, adds a dry run, and ensures reruns do not create damage..</p>
            <div class="hero-tags">
                <span>Python Automation Coder</span>
                <span>Python / SQL</span>
                <span>Practical + Direct + Checklist-driven</span>
                <span>Standard Library / requests</span>
            </div>
        </section>

        <section class="solution-grid" aria-label="Coding style">
            <article class="style-card">
                <span>Core system</span>
                <h2>File-rule builder</h2>
                <p>A safe file-organization planner that previews rules, detects conflicts, and reports what a repeat run would change.</p>
            </article>
            <article class="style-card">
                <span>Feedback loop</span>
                <h2>Conflict detector</h2>
                <p>Ravi Automate applies Dry-run design to keep this part visible and testable.</p>
            </article>
            <article class="style-card">
                <span>Proof point</span>
                <h2>Run summary</h2>
                <p>The implementation uses Safe reruns as its review lens.</p>
            </article>
        </section>

        <section class="lab-panel">
            <div>
                <p class="eyebrow">dry-run plan</p>
                <h2>Choose Ravi Automate's next move.</h2>
                <p id="status">A safe file-organization planner that previews rules, detects conflicts, and reports what a repeat run would change.</p>
                <p class="stack-note">Method cue: Task decomposition / Dry-run design. Principle cue: Automate repetition, not judgment / Safe reruns. Stack cue: Standard Library / requests / openpyxl basics. Language cue: Python / SQL. Goal cue: Automate / Build / Debug. Vibe cue: Practical + Direct + Checklist-driven.</p>
            </div>
            <div class="button-row" aria-label="Sample actions">
                <button type="button" data-move="0">Preview plan</button>
                <button type="button" data-move="1">Resolve conflict</button>
                <button type="button" data-move="2">Simulate rerun</button>
            </div>
        </section>
    </main>
    <script src="script.js"></script>
</body>
</html>
styles.css css
/* Ravi Automate theme: Idempotent automation / dry-run plan */
:root {
    color-scheme: dark;
    --bg: hsl(202 36% 10%);
    --panel: color-mix(in srgb, var(--bg), white 7%);
    --panel-strong: color-mix(in srgb, var(--bg), white 13%);
    --ink: hsl(214 34% 94%);
    --muted: color-mix(in srgb, var(--ink), transparent 32%);
    --accent: hsl(270 82% 60%);
    --accent-2: hsl(358 68% 64%);
    --warn: hsl(238 86% 62%);
    --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":"Ravi Automate","role":"Python Automation Coder","solution":"Downloads Automation Planner","style":"Idempotent automation","focus":"Ravi documents the manual workflow, makes inputs and outputs explicit, adds a dry run, and ensures reruns do not create damage.","artifact":"dry-run plan","frameworks":["Standard Library","requests","openpyxl basics"],"bestFor":["Automation scripts","File tasks","Reports"],"vibes":["Practical","Direct","Checklist-driven"],"goals":["Automate","Build","Debug"],"methodologies":["Task decomposition","Dry-run design","Idempotency checks","Structured logging"],"ideologies":["Automate repetition, not judgment","Safe reruns","Explicit inputs and outputs","Exit codes matter"],"project":{"title":"Downloads Automation Planner","summary":"A safe file-organization planner that previews rules, detects conflicts, and reports what a repeat run would change.","artifact":"dry-run plan","features":["File-rule builder","Conflict detector","Run summary"],"actions":["Preview plan","Resolve conflict","Simulate rerun"]}};
const moves = [{"label":"Preview plan","result":"Ravi Automate uses Task decomposition to work through file-rule builder, guided by Automate repetition, not judgment."},{"label":"Resolve conflict","result":"Ravi Automate uses Dry-run design to work through conflict detector, guided by Safe reruns."},{"label":"Simulate rerun","result":"Ravi Automate uses Idempotency checks to work through run summary, guided by Explicit inputs and outputs."}];
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 Ravi Automate.

Automate

Write a Python script to rename files using a safe dry-run mode.

Build

Create a report from CSV files and save a summary.

Debug

Why does my automation work on one file but fail on another?

Review

Review this script for safety before it changes files.

How this coder helps

Best workflow
Document the manual steps, write dry-run logic, process samples, then add logging.
Good inputs
File examples, workflow steps, expected output names, and error cases.
Boundaries
Avoids scraping or automation that violates terms, privacy, or consent.