Commit Graph

218 Commits

Author SHA1 Message Date
7455151c02 feat: Add admin user management panel with improved UI
- Add /admin/users panel for managing users (toggle admin, toggle verified, assign company, reset password, delete)
- Add link to admin menu in base.html
- Replace native confirm()/alert() with styled modals and toast notifications
- Add confirmation modal for password reset with warning icon
- Add styled reset URL modal with copy functionality
- Add danger-styled confirmation modal for user deletion

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 17:27:23 +01:00
5af216c5e0 security: Fix critical vulnerabilities from security audit
- Remove sensitive tokens from logs (show only 8-char preview)
- Enforce SECRET_KEY minimum 32 characters (no default value)
- Reduce login rate limit from 100/hour to 5/hour
- Remove exposed PageSpeed API key from CLAUDE.md

BREAKING: Application requires SECRET_KEY >= 32 chars in .env

Author: Maciej Pienczyn z wykorzystaniem AI i Claude Opus
2026-01-09 15:50:40 +01:00
39a91b709a feat: Add release notes page with version history
- Add /release-notes route with changelog from v1.0.0 to v1.9.0
- Document all major features added since platform launch

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 14:32:33 +01:00
41f7b1d01f feat: Add GBP Audit and Social Audit admin dashboards
- Add /admin/gbp-audit panel with completeness stats, field coverage, company table
- Add /admin/social-audit panel with platform coverage, top followers, company table
- Update admin menu with new dashboard links

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 14:14:56 +01:00
f417b0d093 fix: IT Audit form pre-fills text inputs and selects on edit
- Add value attribute to 5 text input fields (it_provider_name, it_contact_name,
  it_contact_email, azure_tenant_name, ad_domain_name)
- Add content to collaboration_notes textarea
- Add JavaScript initialization for 23 select dropdowns in initializeForm()

This ensures that when editing an existing IT Audit, all previously entered values
are displayed in the form instead of showing empty fields with placeholders.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 13:35:25 +01:00
c65f1605b1 fix: IT Audit fixes and improvements
- Add api_it_audit_export endpoint for CSV export
- Fix url_for references (company_detail -> company_detail_by_slug)
- Fix form action (save_it_audit -> it_audit_save)
- Add "Audyt IT" button to company profile contact bar

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 13:19:53 +01:00
27ec723256 auto-claude: subtask-7-4 - Add navigation link to IT Audit in admin sidebar/menu 2026-01-09 09:31:53 +01:00
b405fdd810 auto-claude: subtask-7-3 - Handle edge cases for IT audit
Edge cases handled:
1. Partial submission:
   - Added is_partial flag to save response
   - Dynamic success message based on completeness score
   - Completeness threshold messages (< 30%, 30-70%, > 70%)

2. Company without audit:
   - Fixed template to show "Brak audytu" for companies without audit
   - Added "Utwórz audyt" button (+ icon) for companies without audit
   - Fixed data structure mismatch between route and template

3. Multiple audit history:
   - Added get_company_audit_history() convenience function
   - Added has_company_audit() helper function
   - Added /api/it-audit/history/<company_id> API endpoint
   - Returns history_count in save response

Other fixes:
- Fixed stats variable naming in admin_it_audit route
- Fixed collaboration_matches data structure for template
- Fixed url_for to use slug instead of company_id
- Fixed match_type filter (shared_licensing not shared_m365_licensing)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 09:30:50 +01:00
fa45b4b793 auto-claude: subtask-7-2 - Test collaboration matching
Created comprehensive test suite for IT audit collaboration matching:

1. Unit tests (tests/test_it_audit_collaboration.py):
   - 12 tests verifying all 6 match types
   - Backup replication, shared licensing, Teams federation
   - Shared monitoring, collective purchasing, knowledge sharing
   - Edge cases for size parsing and similarity

2. Integration test script (scripts/test_collaboration_matching.py):
   - Creates test audits with matching criteria
   - Runs collaboration matching algorithm
   - Verifies matches saved to database

All unit tests pass (12/12).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 09:24:45 +01:00
ae1a62be31 auto-claude: subtask-7-1 - Add missing it_audit.html user-facing template
Created templates/it_audit.html for /audit/it/<slug> route that displays:
- Overall score with circular progress indicator
- Security, collaboration, completeness metrics
- Technology stack summary (Azure AD, M365, EDR, MFA, etc.)
- Collaboration flags (shared licensing, backup replication, etc.)
- Recommendations section
- Empty state when no audit data exists

Follows SEO audit template pattern for consistency.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 09:20:12 +01:00
6a38f31ebb auto-claude: subtask-6-5 - Add /audit/it/<slug> route for user-facing IT audi
Add user-facing IT audit dashboard route following the pattern of existing
SEO and GBP audit dashboards:
- Route: /audit/it/<slug>
- Access control: admin can view any company, members only their own
- Returns latest IT audit data with scores, technology flags, and recommendations
- Renders it_audit.html template

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 09:15:47 +01:00
36272307fb auto-claude: subtask-6-4 - Add /api/it-audit/matches/<company_id> endpoint fo
Add API endpoint for getting IT audit collaboration matches for a company.
- Admin-only access (matches are not visible to regular users per spec)
- Returns all matches where company is either party A or B
- Includes partner company info, match type/score/reason, status
- Follows existing API patterns (login_required, try/finally, jsonify)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 09:12:59 +01:00
b6a3411e43 auto-claude: subtask-6-3 - Add /it-audit/save POST route for saving form data
Implemented POST endpoint at /it-audit/save that:
- Accepts JSON or form data with IT audit fields
- Validates company access (admin for any, users for their own)
- Parses boolean, array, and string fields with proper type handling
- Uses ITAuditService to save audit with scoring calculation
- Returns JSON with audit scores and redirect URL
- Includes rate limiting (30 per hour)
- Handles errors with rollback and logging

Added helper function _parse_it_audit_form_data() to properly parse:
- Boolean fields (checkboxes)
- Array fields (multi-select)
- String fields
- JSON fields (zabbix_integration)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 09:11:24 +01:00
10ae221c26 auto-claude: subtask-6-2 - Add /it-audit/form GET route for displaying the form
Add Flask route for IT audit form display:
- GET /it-audit/form with optional company_id query parameter
- Access control: admin can access any company, users only their own
- Defaults to current user's company if no company_id provided
- Pre-fills form with existing audit data if available
- Renders it_audit_form.html template

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 09:09:00 +01:00
7370ce78fa auto-claude: subtask-6-1 - Add /admin/it-audit route for admin dashboard
Implemented the IT audit admin dashboard route at /admin/it-audit that:
- Checks for admin authentication (is_admin flag)
- Queries all active companies with their latest IT audit data
- Calculates statistics (audit count, avg scores, maturity distribution)
- Provides technology adoption stats (Azure AD, M365, PBS, Zabbix, EDR, DR)
- Queries collaboration flags from IT audits
- Retrieves and organizes collaboration matches by type
- Renders admin/it_audit_dashboard.html template

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 09:07:07 +01:00
aab2b298a7 auto-claude: subtask-5-3 - Add collaboration matrix section showing company p
Added collaboration matrix section to IT audit dashboard with:
- CSS styles for match type cards following combo-grid pattern
- Six match type categories: M365 licensing, backup replication,
  Teams federation, shared monitoring, collective purchasing,
  and knowledge sharing
- Company pairs display with status badges (suggested, contacted,
  active, declined)
- Empty state with friendly message when no matches exist
- Responsive grid layout matching social_media.html patterns

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 09:04:58 +01:00
b9ba00fae9 auto-claude: subtask-5-2 - Add company table with columns: name, overall score, security score, collaboration score, maturity level, tech icons, actions 2026-01-09 09:02:50 +01:00
e57af8bd78 auto-claude: subtask-5-1 - Create admin/it_audit_dashboard.html with stats gr
Create IT Audit admin dashboard template with:
- Header with title, description, and action buttons
- Stats grid showing: total audits, avg overall score, avg security
  score, avg collaboration score, companies without audit
- Maturity level distribution (basic, developing, established, advanced)
- Technology stats grid (Azure AD, M365, Proxmox PBS, Zabbix, EDR, DR Plan)
- Collaboration flags section (6 cooperation types)
- Empty states for all sections when no data
- Responsive design following patterns from admin_seo_dashboard.html

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:59:58 +01:00
f9a8bcf405 auto-claude: subtask-4-4 - Add progress bar JavaScript for form completion tracking
- Enhanced updateProgress() function to track section-by-section completion
- Added calculateSectionCompletion() helper for per-section field analysis
- Added updateSectionProgress() for section-level progress indicators
- Implemented real-time progress tracking with input event listeners
- Added debounced input handlers for text/email/textarea fields
- Added keyboard navigation support for progress dots (accessibility)
- Progress bar color changes based on completion percentage:
  - Primary (blue) for <50%
  - Warning (yellow) for 50-79%
  - Success (green) for >=80%
- Section dots and numbers turn green when section is 70%+ complete
- Properly handles conditional fields visibility in completion calculation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:56:14 +01:00
f87a3700c5 auto-claude: subtask-4-3 - Add form sections 7-9
Added form sections:
- Section 7 (Monitoring): monitoring solution dropdown, Zabbix/PBS toggles,
  monitoring targets chip-select, alerting methods chip-select, log retention
- Section 8 (Business Apps): ERP, CRM, ticket system, document system dropdowns,
  other business apps and integration methods chip-selects
- Section 9 (Collaboration): 6 collaboration flags checkboxes with descriptions:
  - open_to_shared_licensing (M365 CSP)
  - open_to_backup_replication (Proxmox PBS)
  - open_to_teams_federation (Azure AD)
  - open_to_shared_monitoring (Zabbix)
  - open_to_collective_purchasing
  - open_to_knowledge_sharing

Updated JavaScript:
- Added new chip selections to chipSelections object
- Added conditional field mappings for new toggles
- Added initialization code for all new fields

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:53:59 +01:00
7231428fa7 auto-claude: subtask-4-2 - Add form sections 4-6 (Endpoints, Security, Backup & DR)
Added three new form sections to IT audit form:
- Section 4: Endpoints (Workstations) - device types, OS, MDM, encryption
- Section 5: Security - antivirus/EDR, VPN, MFA, password policy, training
- Section 6: Backup & DR - backup solutions, targets, frequency, retention, DR plan

Features:
- Dropdowns for single-select options (MDM solution, VPN, antivirus, etc.)
- Chip-select for multi-select options (endpoint types, OS, MFA methods, etc.)
- Toggle switches for yes/no questions with conditional fields
- Full JavaScript support for new chip selections and conditional mappings
- Initialization support for editing existing audits
2026-01-09 08:49:48 +01:00
b9a7f4640c auto-claude: subtask-4-1 - Create it_audit_form.html template with base structure
- Created IT audit form template with 9 sections (1-3 fully implemented)
- Section 1: IT Contact (IT manager, outsourcing, provider, contact info)
- Section 2: Cloud & Identity (Azure AD, M365, Google Workspace, local AD)
- Section 3: Server Infrastructure (server count, types, virtualization, OS)
- Sections 4-9: Placeholder structure ready for implementation
- Added progress bar with section navigation dots
- Implemented toggle switches, chip selects for multi-value fields
- Added conditional field visibility logic
- Included loading overlay and info modal patterns
- Responsive design following existing audit templates (gbp_audit.html, seo_audit.html)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:46:23 +01:00
5cdd33857f auto-claude: subtask-2-2 - Implement security scoring algorithm (50% weight)
Security scoring implementation with 7 security elements:
- EDR: +15 pts (highest security value)
- MFA: +10 pts (identity security)
- Firewall: +10 pts (network protection)
- Backup: +10 pts (data protection)
- DR Plan: +10 pts (disaster recovery readiness)
- VPN: +5 pts (secure remote access)
- Monitoring: +5 pts (security visibility)

Max raw score: 65 points. Returns raw score directly.
Normalization to 0-100 happens in overall score calculation.

Verification: has_edr + has_mfa returns 25 (15 + 10).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:30:37 +01:00
e929a9e825 auto-claude: subtask-2-1 - Create it_audit_service.py with ITAuditResult dataclass
Added IT audit service module with:
- ITAuditResult dataclass with all required fields (overall_score, security_score,
  collaboration_score, completeness_score, maturity_level, fields, recommendations)
- FieldStatus dataclass for individual field status tracking
- CollaborationMatch dataclass for collaboration matching results
- ITAuditService class with complete structure:
  - Scoring methods: _calculate_security_score, _calculate_collaboration_score,
    _calculate_completeness_score, calculate_scores
  - CRUD methods: save_audit, get_latest_audit, get_audit_history
  - Matching methods: find_collaboration_matches, save_collaboration_match,
    get_matches_for_company
- Helper functions: get_maturity_level, get_maturity_level_label
- Scoring configuration constants following spec:
  - Security (50% weight): EDR, MFA, firewall, backup, DR plan, VPN, monitoring
  - Collaboration (30% weight): 6 flags + Azure AD, M365, PBS, Zabbix bonuses
  - Completeness (20% weight): weighted field completion percentage
- Maturity levels: basic (0-39), developing (40-59), established (60-79), advanced (80-100)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:27:10 +01:00
23b6425861 auto-claude: subtask-1-4 - Run migration for IT audit tables in DEV database
- Executed it_audit_migration.sql against DEV PostgreSQL (localhost:5433)
- Created it_audits and it_collaboration_matches tables
- Created 12 indexes for performance optimization
- Created 4 views: v_company_it_overview, v_it_audit_history,
  v_it_collaboration_overview, v_it_technology_stats
- Added missing document_management column to match SQLAlchemy model
- Applied grants for nordabiz_app user

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:23:40 +01:00
721e313549 auto-claude: subtask-1-3 - Add ITCollaborationMatch SQLAlchemy model to datab
Added ITCollaborationMatch model to database.py for storing company match pairs:
- company_a_id, company_b_id: Foreign keys to companies table
- match_type: Type of collaboration (shared_licensing, backup_replication, etc.)
- match_reason: Human-readable explanation of the match
- match_score: 0-100 strength score
- status: suggested, contacted, in_progress, completed, declined
- shared_attributes: JSONB for flexible attribute storage
- Helper properties for Polish labels (match_type_label, status_label)
- UniqueConstraint on (company_a_id, company_b_id, match_type)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:20:08 +01:00
2df1ed324f auto-claude: subtask-1-2 - Add ITAudit SQLAlchemy model to database.py
Add comprehensive ITAudit model with all columns for 9-section IT audit form:
- Scores (overall, completeness, security, collaboration)
- IT Contact fields
- Cloud & Identity (Azure AD, M365, Google Workspace)
- Server Infrastructure (virtualization, OS)
- Endpoints (employee/computer counts, MDM)
- Security (antivirus, EDR, VPN, MFA)
- Backup & Disaster Recovery (Proxmox PBS support)
- Monitoring (Zabbix integration placeholder)
- Business Apps (ticketing, ERP, CRM)
- Active Directory configuration
- Collaboration flags for cross-company matching

Includes helper properties for maturity labels and score categories.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:17:48 +01:00
8edcda52e3 auto-claude: subtask-1-1 - Create SQL migration for IT audit tables
Add migration script for it_audits and it_collaboration_matches tables:

- it_audits: 9-section form storage (IT Contact, Cloud & Identity,
  Server Infrastructure, Endpoints, Security, Backup & DR, Monitoring,
  Business Apps, Collaboration flags)
- it_collaboration_matches: Cross-company matching with 6 types
  (shared licensing, backup replication, Teams federation,
  shared monitoring, collective purchasing, knowledge sharing)
- Indexes for company_id, audit_date, scores, maturity level
- Update triggers for updated_at timestamps
- Views: company overview, audit history, collaboration overview,
  technology statistics
- Grants for nordabiz_app user

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 08:14:51 +01:00
86db0a98d4 fix: Track CHANGELOG.md in git (was incorrectly ignored)
- Removed CHANGELOG.md from .gitignore
- Added CHANGELOG.md to version control

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 06:44:14 +01:00
9fd6f994a0 chore: Remove Auto0Claude status and old config files
Removed:
- .auto-claude-status (Auto0Claude artifact)
- debug-headers.conf (old nginx config)
- nginx-custom-maintenance.conf (old nginx config)
- advanced-config-update.sql (one-time SQL)
- SQLite backup files (not tracked by git)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 06:43:34 +01:00
6970dc5a6b chore: Project cleanup - remove Auto0Claude and obsolete docs
Removed:
- .auto-claude/ directory (79 files, 2.9MB)
- 5 git worktrees and auto-claude/* branches
- Obsolete deployment docs (DEPLOYMENT*.md)
- Iteration summaries (ITERATION_*.md)
- Old analysis files (VERIFICATION_*, DETAILED_FINDINGS, etc.)
- One-time scripts (fix_*.py, import_*.py, migrate_*.py)

Updated:
- CLAUDE.md: Added Social Media Audit as implemented
- CLAUDE.md: Marked fetch_company_news.py as TODO

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 06:41:03 +01:00
39cd257f4e Fix YouTube detection overwriting valid matches
- Add 'channel', 'c', 'user', '@' etc. to YouTube exclusion list
- Add 'bold_themes', 'boldthemes' to Twitter/Facebook exclusions (theme creators)
- Fix pattern matching loop to stop after first valid match per platform
- Prevents fallback pattern from overwriting correct channel ID with 'channel'

Fixes issue where youtube.com/channel/ID was being overwritten with
youtube.com/channel/channel by the second fallback pattern.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 05:36:06 +01:00
c319777d58 Social Media audit: progress bar improvements
- Add detailed logging to SocialMediaAuditor (website scan, Brave search, results)
- Slow down progress bar animation (400ms instead of 200ms) for better readability
- Bold "ZNALEZIONO" text for found platforms
- Display Google rating and review count in progress
- Increase wait time before modal close (4 seconds)
- Add console.log for debugging audit response

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 05:29:17 +01:00
8fed190303 fix(social-audit): Convert opening_hours dict to JSON for JSONB column
Fixes: psycopg2.ProgrammingError: can't adapt type 'dict'

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 05:14:01 +01:00
deed279521 fix(social-audit): Use SocialMediaAuditor for comprehensive audit
- Import and use SocialMediaAuditor from scripts/social_media_audit.py
- Audit now scans website HTML for social media links
- Discovers profiles via Brave Search API (if configured)
- Fetches Google Business Profile data via Google Places API
- Saves discovered profiles to database

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 05:12:25 +01:00
cadf91b481 feat(social-audit): Add ability to run Social Media audit
- Add "Uruchom audyt" button to social_audit.html
- Create POST /api/social/audit endpoint to verify profile URLs
- Add loading overlay and modal for audit progress/results
- Audit verifies each social media URL and updates check_status

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 05:07:58 +01:00
505800381e feat(social-audit): Add Social Media audit dashboard
- Create /audit/social/<slug> route with platform presence analysis
- Create social_audit.html template with 6 platforms (FB, IG, LinkedIn, YT, X, TikTok)
- Add purple "Audyt Social" button on company profile next to GBP and SEO audits
- Show score based on platforms count, profile details and recommendations

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 05:03:57 +01:00
c7b57100ad fix(seo-audit): Use correct attribute website_url instead of url
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:54:51 +01:00
3da1501872 feat(seo-audit): Add dedicated SEO audit page for individual companies
- Create /audit/seo/<slug> route with access control (admin or company owner)
- Create seo_audit.html template with score visualization
- Add green "Audyt SEO" button next to GBP audit button on company profile
- Match styling and UX patterns from GBP audit feature

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:53:21 +01:00
b3885a06e8 feat(gbp-audit): Add data source tags to progress overlay
- Show "Google" badge next to each field in progress steps
- Blue badge indicates data comes from Google Places API
- Helps users understand where audit data originates

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:46:14 +01:00
3b2dcc279b feat(gbp-audit): Use Google data for all audit fields
- Add new columns to CompanyWebsiteAnalysis: google_name, google_address,
  google_phone, google_website, google_types, google_maps_url
- Update _check_name(), _check_address(), _check_phone(), _check_website(),
  _check_categories() to use Google data instead of NordaBiz database
- All audit fields now show real data from Google Business Profile
- Fallback to NordaBiz data only when Google data unavailable

Migration: database/migrations/add_google_gbp_fields.sql

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:43:03 +01:00
7aacdd5951 Fix: include details field in fields_status serialization
The details field (with reviews breakdown) was not being passed to template.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:32:40 +01:00
0c1d03418b GBP Audit: show reviews scoring breakdown
Add details field to FieldStatus for passing breakdown info.
Display scoring breakdown like: "3 pkt (1. opinia) + 1 pkt (ocena) = 4/9"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:30:04 +01:00
a25767e49c GBP Audit: simple user-friendly reviews message
Replace technical scoring breakdown with simple messages:
- 0 reviews: "Poproś klientów o opinię"
- Partial: "Dobry początek! Zbierz więcej opinii"
- Full score: "Doskonale! Masz maksymalną punktację"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:28:13 +01:00
d44df3b104 GBP Audit: user-friendly reviews scoring explanation
Clearer breakdown showing:
- What points user already earned (✓)
- What's still pending (○)
- Actionable tip for zero reviews
- Goal reminder for partial scores

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:25:39 +01:00
82b57427f7 GBP Audit: add scoring explanation for reviews field
Shows how review points are calculated:
- Full score (9/9): 5+ reviews AND rating >= 4.0
- Partial: 3 pts (first review) + 1 pt/review + 1 pt bonus (rating >= 4.0)
- Missing: 0 pts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:23:24 +01:00
6758e208d4 GBP Audit: fetch Google data + detailed progress overlay
- Add fetch_google_business_data() to fetch fresh data from Google Places API
- Progress overlay shows all 10 data fields with actual values:
  * Place search, Rating, Reviews, Photos, Hours, Phone, Website, Status
- 5-second delay after completion for user to read results
- Fix opening hours display (show formatted weekday_text)
- Fix reviews scoring (integer-based: 3 base + 1/review + 1 bonus)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 04:19:44 +01:00
69bb6b839a docs: Fix incorrect SQLite references - DEV uses PostgreSQL via Docker
The documentation incorrectly stated that DEV environment uses SQLite
when it actually uses PostgreSQL via Docker on localhost:5433.

Updated files:
- CLAUDE.md - main project instructions
- PROJECT_INFO.md - environment documentation
- deployment_checklist.md - deployment procedures
- SCRIPTS_INDEX.md - script usage commands
- .claude/commands/*.md - all slash command definitions
- tests/test_admin_seo_dashboard.py - test database URL

DEV environment:
- PostgreSQL via Docker: localhost:5433
- Container: nordabiz-postgres
- Database: nordabiz
- User: nordabiz_app

PROD environment:
- PostgreSQL: 10.22.68.249:5432

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 03:40:50 +01:00
def60a4b22 docs: fix database config - DEV uses PostgreSQL via Docker, not SQLite 2026-01-09 03:30:51 +01:00
3cea691fd4 fix(gbp): fix opening hours and photos data fetching
Add database migration to support opening hours and photos fields.
Update GBP audit service to properly fetch and validate these fields
from Google Business Profile API. Add comprehensive test coverage.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 03:27:38 +01:00