Add Django site, Docker packaging, and beta/prod Gitea deploys.
Deploy Beta / unit-tests (push) Successful in 9s
Deploy Beta / docker (push) Successful in 17s
Deploy Beta / deploy-beta (push) Successful in 2m31s

Unignore site/ (was blocked by mkdocs /site rule), add compose/Docker/uv tooling, and split deploys so push to main goes to beta while prod stays manual.
This commit is contained in:
2026-08-08 07:32:55 -05:00
parent 7dca98bbf6
commit 1f7d78de64
204 changed files with 21662 additions and 70 deletions
+85
View File
@@ -0,0 +1,85 @@
import json
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.shortcuts import get_object_or_404, render
from django.views.decorators.http import require_http_methods, require_POST
from social.models import SocialAccount, SocialPost
from social.ollama import OllamaError, generate_social_post
@login_required
def post_list(request):
posts = SocialPost.objects.all()[:100]
return render(request, "social/post_list.html", {"posts": posts})
@login_required
def post_detail(request, pk):
post = get_object_or_404(SocialPost.objects.prefetch_related("targets"), pk=pk)
return render(request, "social/post_detail.html", {"post": post})
@login_required
def account_list(request):
accounts = SocialAccount.objects.all()
return render(request, "social/account_list.html", {"accounts": accounts})
@login_required
@require_http_methods(["GET", "POST"])
def composer(request):
"""Portal composer — optional Ollama draft assist."""
draft = ""
error = ""
prompt = ""
if request.method == "POST":
prompt = (request.POST.get("prompt") or "").strip()
platform = (request.POST.get("platform") or "").strip()
if prompt:
try:
draft = generate_social_post(prompt, platform=platform)
except OllamaError as exc:
error = str(exc)
body = (request.POST.get("body") or draft).strip()
if request.POST.get("action") == "save" and body:
post = SocialPost.objects.create(
body=body,
ollama_prompt=prompt,
created_by=request.user,
)
return render(
request,
"social/composer.html",
{"saved": post, "draft": body, "prompt": prompt},
)
return render(
request,
"social/composer.html",
{"draft": draft, "prompt": prompt, "error": error},
)
@login_required
@require_POST
def api_generate(request):
"""
JSON endpoint for the portal to draft posts via Ollama.
POST JSON: {"prompt": "...", "platform": "facebook"|...}
"""
try:
payload = json.loads(request.body.decode() or "{}")
except json.JSONDecodeError:
payload = request.POST.dict()
prompt = (payload.get("prompt") or "").strip()
if not prompt:
return JsonResponse({"error": "prompt required"}, status=400)
try:
text = generate_social_post(
prompt, platform=(payload.get("platform") or "").strip()
)
except OllamaError as exc:
return JsonResponse({"error": str(exc)}, status=502)
return JsonResponse({"text": text})