Fixes for site
This commit is contained in:
@@ -61,6 +61,16 @@
|
||||
|
||||
<!-- System Stats & Reset -->
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-light">
|
||||
<h5 class="mb-0"><i class="fas fa-sliders-h me-2"></i>Configuration</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="text-muted small">Manage global AI writing rules and banned words.</p>
|
||||
<a href="{{ url_for('admin_style_guidelines') }}" class="btn btn-outline-primary w-100"><i class="fas fa-spell-check me-2"></i>Edit Style Guidelines</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-light">
|
||||
<h5 class="mb-0"><i class="fas fa-chart-pie me-2"></i>System Stats</h5>
|
||||
|
||||
48
templates/admin_style.html
Normal file
48
templates/admin_style.html
Normal file
@@ -0,0 +1,48 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h2><i class="fas fa-spell-check me-2 text-primary"></i>Style Guidelines</h2>
|
||||
<a href="{{ url_for('admin_dashboard') }}" class="btn btn-outline-secondary">Back to Admin</a>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<p class="text-muted">
|
||||
These lists are used by the <strong>Editor Persona</strong> to critique chapters and by the <strong>Writer</strong> to refine text.
|
||||
The AI will be penalized for using words in these lists.
|
||||
</p>
|
||||
|
||||
<form method="POST">
|
||||
<div class="mb-4">
|
||||
<label class="form-label fw-bold text-danger">
|
||||
<i class="fas fa-ban me-2"></i>Banned "AI-isms" & Clichés
|
||||
</label>
|
||||
<div class="form-text mb-2">Common tropes that make text sound robotic (e.g., "testament to", "tapestry"). One per line.</div>
|
||||
<textarea name="ai_isms" class="form-control font-monospace" rows="10">{{ data.ai_isms|join('\n') }}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label fw-bold text-warning">
|
||||
<i class="fas fa-filter me-2"></i>Filter Words
|
||||
</label>
|
||||
<div class="form-text mb-2">Words that create distance between the reader and the POV (e.g., "felt", "saw", "realized"). One per line.</div>
|
||||
<textarea name="filter_words" class="form-control font-monospace" rows="6">{{ data.filter_words|join('\n') }}</textarea>
|
||||
</div>
|
||||
|
||||
<div class="d-grid gap-2">
|
||||
<button type="submit" class="btn btn-primary btn-lg">
|
||||
<i class="fas fa-save me-2"></i>Save Guidelines
|
||||
</button>
|
||||
<button type="submit" formaction="{{ url_for('optimize_models') }}" class="btn btn-outline-info w-100 mt-2">
|
||||
<i class="fas fa-magic me-2"></i>Auto-Refresh with AI
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@@ -197,7 +197,16 @@
|
||||
<div class="d-flex justify-content-between align-items-start mb-2">
|
||||
<span class="badge bg-light text-dark border">Book {{ book.book_number }}</span>
|
||||
{% if generated_books.get(book.book_number) %}
|
||||
<span class="badge bg-success"><i class="fas fa-check me-1"></i>Generated</span>
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-sm btn-success dropdown-toggle" data-bs-toggle="dropdown">
|
||||
<i class="fas fa-check me-1"></i>Generated
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
{% set gb = generated_books.get(book.book_number) %}
|
||||
{% if gb.epub %}<li><a class="dropdown-item" href="/project/{{ gb.run_id }}/download?file={{ gb.epub }}"><i class="fas fa-file-epub me-2"></i>Download EPUB</a></li>{% endif %}
|
||||
{% if gb.docx %}<li><a class="dropdown-item" href="/project/{{ gb.run_id }}/download?file={{ gb.docx }}"><i class="fas fa-file-word me-2"></i>Download DOCX</a></li>{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
{% else %}
|
||||
<span class="badge bg-secondary">Planned</span>
|
||||
{% endif %}
|
||||
|
||||
@@ -109,54 +109,64 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<!-- Left Column: Cover Art -->
|
||||
<div class="col-md-4 mb-4">
|
||||
<div class="card shadow-sm h-100">
|
||||
<div class="card-header bg-light">
|
||||
<h5 class="mb-0"><i class="fas fa-image me-2"></i>Cover Art</h5>
|
||||
<!-- Generated Books in this Run -->
|
||||
{% for book in books %}
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-light">
|
||||
<h5 class="mb-0"><i class="fas fa-book me-2"></i>{{ book.folder }}</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<!-- Left Column: Cover Art -->
|
||||
<div class="col-md-4 mb-3">
|
||||
<div class="text-center">
|
||||
{% if book.cover %}
|
||||
<img src="{{ url_for('download_artifact', run_id=run.id, file=book.cover) }}" class="img-fluid rounded shadow-sm mb-3" alt="Book Cover" style="max-height: 400px;">
|
||||
{% else %}
|
||||
<div class="alert alert-secondary py-5">
|
||||
<i class="fas fa-image fa-3x mb-3"></i><br>No cover.
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if loop.first %}
|
||||
<form action="{{ url_for('regenerate_artifacts', run_id=run.id) }}" method="POST" class="mt-2">
|
||||
<textarea name="feedback" class="form-control mb-2 form-control-sm" rows="1" placeholder="Cover Feedback..."></textarea>
|
||||
<button type="submit" class="btn btn-sm btn-outline-primary w-100">
|
||||
<i class="fas fa-sync me-2"></i>Regenerate All
|
||||
</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body text-center">
|
||||
{% if has_cover %}
|
||||
<img src="{{ url_for('download_artifact', run_id=run.id, file='cover.png') }}" class="img-fluid rounded shadow-sm mb-3" alt="Book Cover">
|
||||
{% else %}
|
||||
<div class="alert alert-secondary py-5">
|
||||
<i class="fas fa-image fa-3x mb-3"></i><br>
|
||||
No cover generated yet.
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- Right Column: Blurb -->
|
||||
<div class="col-md-8">
|
||||
<h6 class="fw-bold">Back Cover Blurb</h6>
|
||||
<div class="p-3 bg-light rounded mb-3">
|
||||
{% if book.blurb %}
|
||||
<p class="mb-0" style="white-space: pre-wrap;">{{ book.blurb }}</p>
|
||||
{% else %}
|
||||
<p class="text-muted fst-italic mb-0">No blurb generated.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<form action="{{ url_for('regenerate_artifacts', run_id=run.id) }}" method="POST">
|
||||
<label class="form-label text-start w-100 small fw-bold">Regenerate Art & Files</label>
|
||||
<textarea name="feedback" class="form-control mb-2" rows="2" placeholder="Feedback (e.g. 'Make the font larger', 'Use a darker theme')..."></textarea>
|
||||
<button type="submit" class="btn btn-primary w-100">
|
||||
<i class="fas fa-sync me-2"></i>Regenerate
|
||||
</button>
|
||||
</form>
|
||||
<h6 class="fw-bold">Artifacts</h6>
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
{% for art in book.artifacts %}
|
||||
<a href="{{ url_for('download_artifact', run_id=run.id, file=art.path) }}" class="btn btn-sm btn-outline-success">
|
||||
<i class="fas fa-download me-1"></i> {{ art.name }}
|
||||
</a>
|
||||
{% else %}
|
||||
<span class="text-muted small">No files found.</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
<!-- Right Column: Blurb & Stats -->
|
||||
<div class="col-md-8 mb-4">
|
||||
<!-- Blurb -->
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-light">
|
||||
<h5 class="mb-0"><i class="fas fa-align-left me-2"></i>Blurb</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{% if blurb %}
|
||||
<p class="card-text" style="white-space: pre-wrap;">{{ blurb }}</p>
|
||||
{% else %}
|
||||
<p class="text-muted fst-italic">Blurb not generated yet.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Stats -->
|
||||
<div class="row mb-4">
|
||||
<div class="row mb-4">
|
||||
<div class="col-6">
|
||||
<div class="card shadow-sm text-center">
|
||||
<div class="card-body">
|
||||
|
||||
Reference in New Issue
Block a user