Files
Bookra/graphify-out/GRAPH_REPORT.md
T
Tomas Dvorak cf3315e8fc
CI / Frontend (push) Successful in 11m7s
CI / Go - apps/auth-service (push) Failing after 8s
CI / Go - apps/backend (push) Failing after 2s
CI / Docker publish - auth-service (push) Has been skipped
CI / Docker publish - backend (push) Has been skipped
cleanup
2026-05-05 09:48:15 +02:00

13 KiB

Graph Report - /home/tdvorak/Desktop/PROG+HTML/Bookra (2026-04-30)

Corpus Check

  • 166 files · ~380,279 words
  • Verdict: corpus is large enough that graph structure adds value.

Summary

  • 794 nodes · 1114 edges · 29 communities detected
  • Extraction: 87% EXTRACTED · 13% INFERRED · 0% AMBIGUOUS · INFERRED: 150 edges (avg confidence: 0.8)
  • Token cost: 0 input · 0 output

Community Hubs (Navigation)

God Nodes (most connected - your core abstractions)

  1. trimSpace() - 47 edges
  2. PGRepository - 46 edges
  3. MemoryRepository - 46 edges
  4. NewService() - 28 edges
  5. NewMemoryRepository() - 22 edges
  6. Handler - 20 edges
  7. Service - 20 edges
  8. DB - 18 edges
  9. New() - 17 edges
  10. NewServer() - 17 edges

Surprising Connections (you probably didn't know these)

  • New() --calls--> NewGoogleProvider() [INFERRED] apps/auth-service/internal/handlers/handlers.go → apps/auth-service/internal/oauth/google.go
  • NewServer() --calls--> NewCustomerService() [INFERRED] apps/backend/internal/api/server.go → apps/backend/internal/bookings/customer_service.go
  • main() --calls--> Load() [INFERRED] apps/backend/cmd/api/main.go → apps/backend/internal/config/config.go
  • main() --calls--> getEnv() [INFERRED] apps/backend/cmd/api/main.go → apps/auth-service/internal/config/config.go
  • main() --calls--> New() [INFERRED] apps/backend/cmd/api/main.go → apps/auth-service/internal/handlers/handlers.go

Communities

Community 0 - "Neon Database Core"

Cohesion: 0.06 Nodes (42): NewNeonVerifier(), NeonVerifier, CheckoutSession, PaymentMethod, Service, checkoutAvailable(), customDataString(), customerSnapshotKey() (+34 more)

Community 1 - "Paddle Billing & Dashboard"

Cohesion: 0.04 Nodes (38): getPaddle(), paddleConfigured(), handleCancel(), handleReschedule(), reference(), token(), changeMonth(), demoData() (+30 more)

Community 2 - "Memory Repository"

Cohesion: 0.04 Nodes (3): MemoryRepository, defaultAvailabilityBlocks(), maxInt()

Community 3 - "PostgreSQL Repository"

Cohesion: 0.04 Nodes (2): PGRepository, firstNonEmpty()

Community 4 - "Domain Models"

Cohesion: 0.05 Nodes (40): AvailabilityBlockRequest, BlockedDay, BookingDefaultsRequest, BrandProfile, CancelBookingRequest, CheckoutLaunchResponse, CheckoutSessionRequest, CreateBlockedDayRequest (+32 more)

Community 5 - "Server & Main Entry"

Cohesion: 0.06 Nodes (22): main(), runMigrations(), Server, allowedOrigins(), authorizeJobRunner(), NewServer(), TestDispatchReminderJobsAcceptsConfiguredJobRunnerKey(), TestDispatchReminderJobsRequiresJobRunnerKey() (+14 more)

Community 6 - "Admin Dashboard"

Cohesion: 0.06 Nodes (12): NewAdminDashboard(), AdminDashboard, CheckoutRequest, Handler, detectLocale(), generateState(), oauthCookieSecure(), LoginRequest (+4 more)

Community 7 - "Test Suite"

Cohesion: 0.13 Nodes (28): TestGenerateTokensProducesVerifiableAccessAndRefreshTokens(), TestRefreshTokensRejectsInvalidToken(), TestRefreshTokensReturnsRotatedPair(), TestCheckoutAvailableForPlanRequiresConfiguredPlan(), TestCheckoutAvailableForPlanRequiresSecret(), testConfig(), TestCreateCheckoutRequiresPaddleConfig(), TestCreateCheckoutReturnsLaunchPayload() (+20 more)

Community 8 - "Database Records"

Cohesion: 0.06 Nodes (31): AvailabilityBlockRecord, AvailabilityRuleRecord, BillingSnapshotRecord, BlockedDayRecord, BookingRecord, BrandProfileRecord, ClassSessionRecord, CreateBlockedDayParams (+23 more)

Community 9 - "Widget Builder & Icons"

Cohesion: 0.08 Nodes (5): generateCode(), generatedMapElementId(), generateMapCode(), json(), safeHexColor()

Community 10 - "Email Templates Service"

Cohesion: 0.14 Nodes (15): Config, EmailTemplate, Service, bookingConfirmationCS(), BookingConfirmationEmail(), bookingConfirmationEN(), MagicLinkEmail(), magicLinkEmailCS() (+7 more)

Community 11 - "Notification Service"

Cohesion: 0.15 Nodes (13): noopNotifier, Notifier, Service, collides(), countClassBookings(), generateAppointmentSlots(), generateClassSlots(), normalizePlanCode() (+5 more)

Community 12 - "Database Connection"

Cohesion: 0.1 Nodes (2): DB, Stats

Community 14 - "Email Provider"

Cohesion: 0.18 Nodes (11): DeliveryReceipt, EmailMessage, EmailProvider, noopEmailProvider, Service, localizedStartsAt(), NewService(), reminderRecipient() (+3 more)

Cohesion: 0.19 Nodes (4): Claims, Service, generateRandomToken(), TokenPair

Community 16 - "Business Service"

Cohesion: 0.12 Nodes (1): Service

Community 17 - "Shell & Auth UI"

Cohesion: 0.14 Nodes (2): submitSignIn(), translateAuthError()

Community 19 - "Email Localization"

Cohesion: 0.3 Nodes (11): BookingEmailData, formatLocalizedDateTime(), formatLocalizedTime(), RenderEmailMessage(), renderHTMLBody(), RenderReminderEmail(), renderSubject(), renderTextBody() (+3 more)

Community 20 - "Customer Notifications"

Cohesion: 0.26 Nodes (4): NewCustomerService(), customerNoopNotifier, CustomerNotifier, CustomerService

Community 21 - "Maps & Geocoding"

Cohesion: 0.36 Nodes (11): resolveMapLocation(), geocodeLocation(), mapStyleById(), parseCoordinateText(), parseGoogleMapsUrl(), parseMapUrl(), parseMapyCzUrl(), resolveLocationInput() (+3 more)

Community 22 - "Brand Profile Service"

Cohesion: 0.33 Nodes (7): Service, firstNonEmpty(), normalizeClock(), normalizePlanCode(), toAvailabilityBlocks(), toTeamInvites(), validateAvailabilityBlocks()

Community 24 - "Google OAuth"

Cohesion: 0.25 Nodes (3): NewGoogleProvider(), GoogleProvider, GoogleUser

Community 26 - "Map URL Parsing"

Cohesion: 0.47 Nodes (3): parseGoogleMapsUrl(), parseMapUrl(), parseMapyCzUrl()

Community 27 - "Location Map"

Cohesion: 0.4 Nodes (2): createMarkerIcon(), safeMarkerColor()

Community 28 - "Tabs Component"

Cohesion: 0.47 Nodes (3): TabsContent(), TabsTrigger(), useTabs()

Cohesion: 0.7 Nodes (4): helperPose(), heroPose(), kind(), sections()

Community 30 - "Auth Provider"

Cohesion: 0.5 Nodes (2): parseJwtPayload(), sessionFromLocalToken()

Community 33 - "User Repository"

Cohesion: 0.67 Nodes (2): MagicLink, User

Community 36 - "Public Booking"

Cohesion: 1.0 Nodes (2): bookSlot(), tenantSlug()

Knowledge Gaps

  • 97 isolated node(s): EmailTemplate, Config, Stats, User, MagicLink (+92 more) These have ≤1 connection - possible missing edges or undocumented components.
  • Thin community PostgreSQL Repository (47 nodes): .RecordBillingEvent(), PGRepository, .AppendWaitlistEntry(), .CreateBlockedDay(), .CreateBooking(), .CreateCustomer(), .CreateLocation(), .CreateNotificationDeliveryLog(), .CreateReminderJob(), .DeleteBlockedDay(), .DeleteCustomer(), .DeleteLocation(), .EnsureUserIdentity(), .GetBookingByReference(), .GetBrandProfile(), .GetCustomerBookingsCount(), .GetCustomerByEmail(), .GetCustomerByID(), .GetCustomerLastBooking(), .GetDashboardMetrics(), .GetLocationByID(), .GetSubscriptionSnapshot(), .GetTenantByBillingCustomerID(), .GetTenantByID(), .GetTenantBySlug(), .GetTenantMembershipByUserID(), .ListAvailabilityRulesByTenant(), .ListBlockedDaysByTenant(), .ListBookingsByTenantBetween(), .ListClassSessionsByTenant(), .ListCustomersByTenant(), .ListDueReminderJobs(), .ListLocationsByTenant(), .ListServicesByTenant(), .ListWorkingHoursByTenant(), .MarkReminderJobDispatched(), .RecordBillingEvent(), .RescheduleBooking(), .UpdateBlockedDay(), .UpdateBookingStatus(), .UpdateCustomer(), .UpdateLocation(), .UpdateTenantBillingCustomerID(), .UpdateTenantBillingState(), .UpdateWorkingHours(), .UpsertSubscriptionSnapshot(), firstNonEmpty() Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Database Connection (21 nodes): db.go, DB, .Close(), .CreateMagicLink(), .CreateUser(), .Exec(), .GetKV(), .GetMagicLink(), .GetStats(), .GetUserByEmail(), .GetUserByID(), .GetUserByProviderID(), .MarkMagicLinkUsed(), New(), .Pool(), .PutKV(), .Query(), .QueryRow(), .UpdateLastLogin(), .UpdateUser(), Stats Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Business Service (17 nodes): service.go, Service, .CreateBlockedDay(), .CreateCustomer(), .CreateLocation(), .DeleteBlockedDay(), .DeleteCustomer(), .DeleteLocation(), .ListBlockedDays(), .ListCustomers(), .ListLocations(), .ListWorkingHours(), NewService(), .UpdateBlockedDay(), .UpdateCustomer(), .UpdateLocation(), .UpdateWorkingHours() Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Shell & Auth UI (15 nodes): shell.tsx, GlobeIcon(), GoogleIcon(), handleOpenAuth(), hideHeader(), isDemoMode(), MenuIcon(), MoonIcon(), sendMagicLink(), showGoogleSignIn(), signInWithGoogle(), submitSignIn(), SunIcon(), translateAuthError(), XIcon() Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Location Map (6 nodes): location-map.tsx, createMarkerIcon(), escapeHtml(), loadLeaflet(), LocationMap(), safeMarkerColor() Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Auth Provider (5 nodes): auth-provider.tsx, AuthProvider(), parseJwtPayload(), sessionFromLocalToken(), useAuth() Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community User Repository (3 nodes): repository.go, MagicLink, User Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Public Booking (3 nodes): public-booking-route.tsx, bookSlot(), tenantSlug() Too small to be a meaningful cluster - may be noise or needs more connections extracted.

Suggested Questions

Questions this graph is uniquely positioned to answer:

  • Why does trimSpace() connect Neon Database Core to Memory Repository, PostgreSQL Repository, Server & Main Entry, Admin Dashboard, Notification Service, Email Provider, Email Localization, Brand Profile Service? High betweenness centrality (0.246) - this node is a cross-community bridge.
  • Why does NewServer() connect Server & Main Entry to Neon Database Core, Customer Notifications, Test Suite? High betweenness centrality (0.116) - this node is a cross-community bridge.
  • Why does reference() connect Paddle Billing & Dashboard to Notification Service? High betweenness centrality (0.101) - this node is a cross-community bridge.
  • Are the 45 inferred relationships involving trimSpace() (e.g. with .StripeSecretConfigured() and .StripeWebhookConfigured()) actually correct? trimSpace() has 45 INFERRED edges - model-reasoned connections that need verification.
  • Are the 27 inferred relationships involving NewService() (e.g. with New() and TestPriceForPlanUsesConfiguredPlanCodesOnly()) actually correct? NewService() has 27 INFERRED edges - model-reasoned connections that need verification.
  • Are the 19 inferred relationships involving NewMemoryRepository() (e.g. with TestDispatchDueProcessesPendingEmailReminders() and TestDispatchDueFailsUnknownChannel()) actually correct? NewMemoryRepository() has 19 INFERRED edges - model-reasoned connections that need verification.
  • What connects EmailTemplate, Config, Stats to the rest of the system? 97 weakly-connected nodes found - possible documentation gaps or missing edges.