57 Commits

Author SHA1 Message Date
708f95089f Merge pull request #11 from FJS-Services-Inc/dev_deploy
Some checks failed
Bandit / bandit (push) Has been cancelled
Docker Image CI / build (3.13) (push) Has been cancelled
refactor: use pathlib.Path for BASE_DIR, BACKEND_DIR, FRONTEND_DIR
2026-02-02 23:12:39 -05:00
49aab16f83 refactor: use pathlib.Path for BASE_DIR, BACKEND_DIR, FRONTEND_DIR
Some checks failed
Bandit / bandit (push) Has been cancelled
Docker Image CI / build (3.13) (push) Has been cancelled
Replaces os.path.dirname/join chains with Path(__file__).resolve() and /
operator. Updated Settings field types from str to Path to satisfy
pydantic v2 strict coercion.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 23:12:16 -05:00
408a2960af Merge pull request #10 from FJS-Services-Inc/dev_deploy
fix: resolve remaining pydantic-ai 0.4.x breakages and startup errors
2026-02-02 23:09:30 -05:00
6e978b9de9 fix: resolve remaining pydantic-ai 0.4.x breakages and startup errors
- result_type -> output_type on Agent (core.py)
- result_validator -> output_validator decorator (tools.py)
- BASE_DIR was operating on the string literal "__name__" instead of
  __file__; all paths were relative to CWD and only worked in Docker
  because the entrypoint cd's into src/ first (consts.py)
- url_for('static', filename=...) -> path=... to match Starlette's
  StaticFiles param name; every other template already used path= (home.html)

Verified locally: all routes and static assets return 200.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 23:09:05 -05:00
78da74a2ab Merge pull request #9 from FJS-Services-Inc/dev_deploy
fix: migrate OpenAIModel to provider API (pydantic-ai 0.4.x)
2026-02-02 21:39:26 -05:00
db0786f60d fix: migrate OpenAIModel to provider API (pydantic-ai 0.4.x)
pydantic-ai 0.4.x removed the api_key kwarg from model constructors.
Pass credentials via OpenAIProvider instead.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 21:38:58 -05:00
e2df9fda79 Merge pull request #8 from FJS-Services-Inc/dev_deploy
fix: add default values for WORKERS, TIMEOUT, PORT in startup scripts
2026-02-02 21:29:40 -05:00
abad0c4d11 fix: add default values for WORKERS, TIMEOUT, PORT in startup scripts
Gunicorn crashes on container start when these env vars are missing from
stack.env — -w receives no argument and exits immediately. Defaults now
match .env.example values (WORKERS=4, TIMEOUT=120, PORT=5051), consistent
with the bash default syntax already used in compose.yaml.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 21:29:16 -05:00
2f938de28d [Komodo] fsecada01: Write Stack File: update ./compose.yaml 2026-02-03 02:16:32 +00:00
1ee0712e25 [Komodo] fsecada01: Write Stack File: update ./compose.yaml 2026-02-03 02:15:50 +00:00
3652f96539 Merge pull request #7 from FJS-Services-Inc/dev_deploy
chore: sync dev_deploy to main
2026-02-02 21:09:00 -05:00
43bb7684c1 chore: sync rename commit from main 2026-02-02 20:53:23 -05:00
9e2f79d455 docs: rename project to StrategIQ
Rename GitHub repo from Pygentic-AI to strategiq. Update all
user-facing references: README badges/links/prose, page <title>,
hero alt text, CLAUDE.md, system-prompt, justfile comments,
komodo deploy echo, SCSS header comments, and compiled CSS.

Intentionally left unchanged: Docker registry image name
(s3docker.francissecada.com/pygentic_ai), container paths
(/opt/pygentic_ai), DB schema, CSS filenames, Traefik labels,
and the production domain (pygenticai.francissecada.com) — all
operational names that would require infra changes.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 20:52:45 -05:00
0bf7a4ff1e Merge pull request #4 from FJS-Services-Inc/feature/tavily-multi-entity-swot
feat: Tavily web search + comparative multi-entity SWOT
2026-02-02 20:45:02 -05:00
b245cb9c5f Merge pull request #6 from FJS-Services-Inc/dev_deploy
chore: sync dev_deploy into main for branch parity
2026-02-02 20:39:03 -05:00
c55601c19b Merge pull request #5 from FJS-Services-Inc/main
chore: sync main into dev_deploy
2026-02-02 20:38:47 -05:00
3bcc93267f feat: add Tavily web search tool and comparative multi-entity SWOT
- Add `search_web` tool backed by tavily-python for grounded research
- Extend SWOT pipeline to accept a primary entity plus optional comparison
  entities; agent prompt drives comparative analysis when comparators are
  present
- Add `primary_entity` / `comparison_entities` fields to SwotAnalysis model
- Wire new form fields (primary + comparison inputs) through router →
  utils → run_agent
- Render entity badges ("vs" header) in result template; fix pre-existing
  bug where iterating model.dict() leaked the `analysis` string into the
  SWOT card grid
- Add comparison-input and entity-badge SCSS components; recompile CSS
- Pin requires-python >=3.12 in pyproject.toml; lock tavily-python 0.7.21

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 20:36:42 -05:00
1ec0884a39 Merge remote-tracking branch 'origin/prod_deploy' 2026-02-02 19:27:12 -05:00
ad1454ff3f Production Deployment Readiness
Some checks failed
Bandit / bandit (push) Has been cancelled
Docker Image CI / build (3.13) (push) Has been cancelled
 Local build verified successfully
 Environment variables complete  
 CI/CD workflows updated
 Build process simplified (source copy vs git clone)
 All production-readiness fixes applied

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 19:11:03 -05:00
0e99dd3fcf refactor: build from source instead of git clone
- Remove git clone in Dockerfile, use COPY instead
- Remove SSH agent setup from GitHub Actions workflow
- Remove --ssh and GIT_BRANCH build args
- Fix Unix line endings in shell scripts (dos2unix)
- Simplifies build process and removes SSH dependency
- Enables faster, more reliable CI/CD builds

 Local build tested and successful

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 19:08:47 -05:00
e491f79b45 fix: production deployment readiness improvements
- Fix deprecated GitHub Actions ::set-output syntax
- Add missing environment variables to .env.example
  - ANTHROPIC_API_KEY for Claude integration
  - FLOWER credentials for Celery monitoring
  - Server configuration (PORT, WORKERS, TIMEOUT)
  - Docker resource limits and configuration
- Update Dockerfile to use organization repository

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 17:25:39 -05:00
f6012feda1 fix: use forward slash in Claude system prompt path for cross-platform compatibility
Changed .claude\system-prompt.md to .claude/system-prompt.md
Forward slashes work on all platforms (Windows, Linux, macOS)
Also streamlined the start-claude output messages

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 16:49:31 -05:00
20f1798782 feat: add justfile task automation and multi-agent Claude orchestration
Task Automation (justfile):
- Comprehensive justfile with 50+ recipes for all common tasks
- Dynamic argument passing for Docker commands
- Organized categories: dev, docker, testing, deployment, cleanup
- Environment variable substitution for flexible configuration
- Health checks and monitoring commands
- Database migration helpers
- Quality check automation (lint, format, security, test)

Development Workflow:
- just setup - One-command project initialization
- just dev/celery/scss-watch - Multi-terminal dev environment
- just build/deploy - Docker operations with custom tags
- just test/lint/check - Quality assurance automation
- just clean/prune - Cleanup utilities

Multi-Agent Claude Orchestration:
- .claude/system-prompt.md - Multi-agent orchestration system
  * 5 specialized personas (🏗️ Architect, 🎨 Frontend, ⚙️ Backend, 🔒 Security, 🚀 DevOps)
  * MCP server routing patterns (Sequential, Context7, Magic, Playwright, Morphllm, Serena)
  * Task coordination workflows and decision frameworks
  * Code quality standards and project-specific patterns

- CLAUDE.md - Project initialization guide
  * Technology stack overview
  * Project structure documentation
  * Key workflows and commands
  * Environment configuration guide
  * Multi-persona activation patterns
  * Quick reference for common tasks

Documentation:
- Updated README.md with comprehensive justfile documentation
  * Installation instructions for just
  * Quick start guide using justfile
  * Complete command reference organized by category
  * Claude AI assistance section
  * Improved project overview and features
  * Development and production workflows

Benefits:
- Consistent command interface across all operations
- Reduced cognitive load - no need to remember complex Docker commands
- Self-documenting workflows with `just --list`
- Claude can intelligently coordinate across multiple domains
- Improved onboarding with clear documentation

Usage:
  just                  # List all commands
  just setup            # Initialize project
  just dev              # Start development
  just start-claude     # View Claude context

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 16:45:04 -05:00
b129cd4f0c feat: modernize deployment pipeline for Komodo integration
Production Deployment Improvements:
- Added .env.example template for secure credential management
- Modernized Docker build workflow with branch sanitization
- Created Komodo deployment trigger workflow
- Updated compose.yaml with environment variable substitution

GitHub Workflows:
- Updated docker-image.yml:
  - Add branch name sanitization (replace / with -)
  - Generate both date-tagged and -latest Docker tags
  - Upgrade to actions/checkout@v4
  - Add pull: true for layer caching

- New komodo-deploy.yml:
  - Triggers after successful Docker Image CI
  - Sends signed webhook to Komodo service
  - Extracts and sanitizes branch names
  - Requires secrets: KOMODO_HOST, KOMODO_STACK_ID_OR_NAME, KOMODO_WEBHOOK_SECRET

Docker Compose Modernization:
- Dynamic IMAGE_TAG with sensible defaults (main-latest)
- Configurable memory limits and reservations
- Environment variable substitution for all configs
- Added container names and restart policies
- Improved healthcheck with Host header
- Updated Traefik labels with Let's Encrypt cert resolver
- Added loadbalancer server URL configuration
- Explicit command paths for reliability

Security:
- .env.example provides safe template (no credentials)
- Actual .env remains in .gitignore (not tracked)

Pattern based on proven Formana deployment architecture.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 16:30:10 -05:00
8e514ded43 feat: comprehensive accessibility improvements for visually impaired users
Implemented WCAG 2.1 AA compliant accessibility enhancements:

ARIA & Semantic HTML:
- Added semantic landmarks (main, section, article, role attributes)
- Comprehensive ARIA labels and descriptions throughout
- ARIA live regions for dynamic content updates (polite/assertive)
- Screen reader-only text for context (.sr-only class)
- Proper heading hierarchy with IDs for navigation

Keyboard Navigation:
- Full keyboard support for SWOT cards (Arrow keys, Home, End)
- Skip to main content link for keyboard users
- Focus management: auto-focus results heading after analysis
- Focus visible styles already in place from SCSS

Screen Reader Enhancements:
- announceToScreenReader() function for status updates
- ARIA live regions on spinner, status timeline, results
- Descriptive labels for icons (aria-hidden for decorative)
- Category descriptions (e.g., "Strengths - positive internal factors")

Interactive Elements:
- Enhanced button and link labels
- Progress indicators with aria-busy and role="progressbar"
- Modal dialog attributes for spinner overlay
- Feed role for status timeline updates

Files Modified:
- result.html: SWOT cards, summary section with full ARIA support
- app.js: Screen reader announcements, keyboard nav, focus management
- base.html: Skip link and semantic main element
- EmptyState.jinja: role="status" with aria-live
- ErrorState.jinja: role="alert" for error announcements
- Spinner.jinja: Modal dialog with progress indicator
- status.html: Feed role for timeline updates
- _components.scss: sr-only and skip-link utility classes

These improvements ensure the SWOT analyzer is fully accessible to
visually impaired users using screen readers and keyboard navigation.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 16:22:01 -05:00
67fce2656b feat: migrate frontend styling to SCSS with modular architecture
- Implement SCSS with 7 modular partials for better maintainability:
  - _variables.scss: Complete design token system
  - _typography.scss: Font hierarchy and styles
  - _animations.scss: Reusable keyframe animations
  - _components.scss: UI components (spinner, search, buttons)
  - _layout.scss: Page structure (hero, SWOT cards, status timeline)
  - _states.scss: Empty and error state components
  - _responsive.scss: Mobile-first breakpoints
- Add build scripts for SCSS compilation and watch mode
- Add EmptyState and ErrorState components for better UX
- Enhance templates with progressive loading and accessibility
- Configure npm with local registry override (.npmrc)
- Add app.js for progressive loading and smooth interactions

Benefits:
- Better code organization with partial separation
- CSS custom properties for runtime theming
- BEM naming convention for maintainability
- Compressed output for production (13KB)
- Easy development with watch mode

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 16:17:10 -05:00
55d2abe4c7 feat: comprehensive frontend UX/UI improvements
Phase 1 Implementation: Enhanced visual design and user experience

## Design System
- Add custom CSS variables for brand colors (purple palette from logo)
- Implement semantic SWOT colors (green/amber/blue/red)
- Add neutral gray scale and shadow system
- Define transition timing functions

## Typography
- Import Inter font for body text with font-feature settings
- Import Space Grotesk for headings with tight letter-spacing
- Add gradient text effect for hero title
- Improve font rendering with antialiasing

## Hero Section
- Redesign with gradient background (purple theme)
- Add animated floating logo icon
- Center-aligned layout with improved hierarchy
- Enhanced subtitle with better readability

## Search Form
- Modern pill-shaped input group with shadows
- Icon integration with proper spacing
- Smooth hover/focus transitions
- Help text with contextual information
- Mobile-responsive stacked layout

## SWOT Result Cards
- Replace basic panels with modern card design
- Add colored top borders and icon badges
- Implement hover lift effects with enhanced shadows
- Add slide-up animations with stagger effect
- Count badges for each category
- Improved list styling with custom bullets
- Executive summary section with branded styling

## Loading States
- Enhanced spinner with backdrop blur
- Progress message display
- Improved loading text hierarchy
- Better visual feedback during analysis

## Responsive Design
- Mobile-first breakpoints (768px, 480px)
- Stacked form layout on mobile
- Single column card grid on small screens
- Adjusted typography sizing for small screens

Files updated:
- src/frontend/static/css/pygentic_ai.css (300+ lines of enhanced styles)
- src/frontend/templates/home.html (hero + search redesign)
- src/frontend/templates/result.html (modern card layout)
- src/frontend/templates/components/snippets/Spinner.jinja (progress messages)

This aligns with Constitution Principle IV (Observability) through better
user feedback, and represents a significant improvement in user experience.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 15:57:52 -05:00
04eec0cd82 fix: add local .npmrc to use public npm registry
- Configure frontend to use public npm registry instead of AWS CodeArtifact
- Fixes authentication errors when running npm commands
- Allows npm-check-updates (ncu) to run without credentials

This resolves the "expired credentials" error by overriding the global
.npmrc configuration with a local setting for this project.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 15:53:30 -05:00
53b1de7959 chore: migrate sqlmodel-crud-utilities to PyPI package
Some checks failed
Bandit / bandit (push) Has been cancelled
Docker Image CI / build (3.13) (push) Has been cancelled
- Remove git source dependency for sqlmodel-crud-utilities
- Use PyPI version v0.1.0 (was v0.0.1a1 from git)
- Update uv.lock with resolved PyPI dependencies
- Also updated: python-dotenv v1.0.1 -> v1.2.1, sqlmodel v0.0.22 -> v0.0.32

This simplifies dependency management by using official PyPI releases
instead of git sources where available.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 15:22:46 -05:00
c7e20d5100 feat: add speckit command definitions for Claude Code CLI
Add command definitions for the speckit workflow system:
- speckit.analyze: Cross-artifact consistency and quality analysis
- speckit.checklist: Generate custom feature checklists
- speckit.clarify: Identify underspecified areas and ask clarifying questions
- speckit.constitution: Create/update project constitution
- speckit.implement: Execute implementation plan and tasks
- speckit.plan: Execute implementation planning workflow
- speckit.specify: Create/update feature specifications
- speckit.tasks: Generate actionable, dependency-ordered task lists
- speckit.taskstoissues: Convert tasks to GitHub issues

These commands integrate with the constitution-based development workflow
established in v1.0.0.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 15:19:53 -05:00
5adea834b7 chore: modernize dependency management and update versions
- Remove legacy requirements.txt files (core_requirements.txt, dev_requirements.txt)
- Migrate to uv-native dependency management with pyproject.toml
- Update git dependencies to use version tags instead of commit hashes:
  - sqlmodel-crud-utilities: v0.0.1a1
  - fastapi-debug-toolbar: patch-2
- Remove pinned versions in pyproject.toml (versions managed via uv.lock)
- Regenerate uv.lock with updated dependency resolution
- Remove .python-version file
- Fix docstring in tools.py (Gemini → OpenAI)

This aligns with Constitution Principle on dependency management best practices.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 15:19:23 -05:00
b677f19646 docs: ratify constitution v1.0.0 (initial governance framework)
- Establish 6 core principles: TDD, API-First, Async, Observability, Type Safety, Security
- Define development standards for FastAPI + Celery + AI services architecture
- Add quality assurance requirements (pre-commit, code review, deployment gates)
- Synchronize all speckit templates with constitution requirements
- Add comprehensive NFRs and constitution compliance checks

BREAKING: All future features must comply with constitution principles

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 15:00:25 -05:00
f8c4dc633a adding icon to static folder 2025-01-23 17:22:25 -05:00
f49d3c6674 Updated README file 2025-01-23 17:19:11 -05:00
f46479bcc4 enhancements: reddit intelligence gathering now ingests multiple subreddits, as defined by the comma-delimited REDDIT_SUBREDDIT env var; added validate_result validator to swot agent; frontend fixes 2025-01-23 17:02:56 -05:00
ad10d98668 patching get_reddit_insights to pull from declared subreddit via get_val 2025-01-22 19:18:59 -05:00
a1d02f94f5 Update core_requirements.in
Hotfix
2025-01-22 18:51:16 -05:00
85e98cd529 Update python_start.sh
Hotfix
2025-01-22 18:30:55 -05:00
27c4d6c91b app reference fixes 2025-01-22 17:08:53 -05:00
0cd01d88c8 Merge pull request #1 from fsecada01/main
Development Branch Deployment
2025-01-22 17:03:10 -05:00
4919cc0620 modifying docker-image.yml to build on PRs into deploy branches, and PRs from specific branches 2025-01-22 16:43:05 -05:00
0a5ddea463 modifying docker-image.yml to build on PRs into deploy branches, and PRs from specific branches 2025-01-22 16:35:25 -05:00
ad961d4d2f Patching name of directory 2025-01-22 16:31:06 -05:00
b1e3c9bb2b adding github actions for CICD integrations. Ready to promote to deployment branches. 2025-01-22 16:21:42 -05:00
b11796ddd6 WORKING: populating results page. 2025-01-22 15:50:48 -05:00
f2363ff81d WIP: status component working; result page still being patched 2025-01-22 11:53:19 -05:00
05d8baffb1 WIP: adding pygentic.css for css spinner element; patching other components. Result objects not loading correctly and messages not stacking 2025-01-21 22:36:11 -05:00
07e7fa09a5 WIP: fixed HTML form issues; components not populating correctly yet 2025-01-21 18:01:06 -05:00
b7a466c714 WIP: completed alpha build of frontend; hx action triggering GET instead of POST request 2025-01-21 16:16:05 -05:00
1e371613dc WIP: building frontend; linkng pages to form backends 2025-01-20 22:16:04 -05:00