Project Structure: A Real-world Example

I built the following application around 8 years ago. My goal with project structure has always been expression of the domain solution space. My desire is that you can understand HOW we solved problems and HOW you would need to modify the application to meet changing requirements just by looking at the structure. You can decide if this was a success or not.

The following is posted with permission of the current business owner. This is presented as it was when I left the company. I don’t know what has changed since. This has been completely unedited.

.
├── bootstrap.php
├── Bot
│   ├── BotBootstrap.php
│   ├── BotCommands
│   │   ├── BotCommand.php
│   │   ├── BotCommandRouter.php
│   │   ├── BotMemory.php
│   │   ├── GoogleMeetLink.php
│   │   ├── Help.php
│   │   ├── RebuildProjection.php
│   │   └── TimeZoneTable.php
│   ├── BotEventLog.php
│   ├── BotMemory.php
│   ├── BotMonologHandler.php
│   ├── Channel.php
│   ├── ChatIds.php
│   └── Memory.php
├── Cert
│   ├── BusinessCertification
│   │   ├── BusinessBecameCertified.php
│   │   ├── BusinessCertificationBootstrap.php
│   │   ├── BusinessCertificationCandidateWasRegistered.php
│   │   ├── BusinessCertificationConfiguration.php
│   │   ├── BusinessCertificationDiscountCodeWasAssigned.php
│   │   ├── BusinessCertificationEmails.php
│   │   ├── BusinessCertificationId.php
│   │   ├── BusinessCertificationLogoConfiguration.php
│   │   ├── business-certification.md
│   │   ├── BusinessCertification.php
│   │   ├── BusinessCertificationSubscriptionWasPurchasedThroughQuaderno.php
│   │   ├── BusinessCertificationVoucherOrderWasMade.php
│   │   ├── BusinessOnboardingTypeform.php
│   │   ├── CertifiedBusinessWasOnboarded.php
│   │   ├── CouldNotCreateBusinessCertificationDiscountCode.php
│   │   ├── CouldNotSendBusinessCertificationOnboardingEmail.php
│   │   ├── CouldNotSendBusinessCertificationWelcomeDetailsEmail.php
│   │   ├── Processes
│   │   │   ├── BusinessCertificationBegins.php
│   │   │   ├── BusinessPurchasesSubscription.php
│   │   │   ├── GenerateVoucherDiscountCode.php
│   │   │   ├── LinkCandidateToBusiness.php
│   │   │   ├── LinkVoucherOrderToBusiness.php
│   │   │   ├── ReceiveOnboardingDetails.php
│   │   │   ├── SendCertificationWelcomeDetailsEmail.php
│   │   │   └── SendOnboardingEmail.php
│   │   ├── Projections
│   │   │   ├── BusinessCertificationCandidate.php
│   │   │   ├── BusinessCertificationCandidatesProjection.php
│   │   │   ├── BusinessCertificationDiscountCode.php
│   │   │   ├── BusinessCertificationDiscountCodesProjection.php
│   │   │   ├── BusinessCertificationListingProjection.php
│   │   │   ├── BusinessCertificationVoucherOrder.php
│   │   │   ├── BusinessCertificationVoucherOrdersProjection.php
│   │   │   ├── CanNotFindBusinessCertificationCandidateByCandidateId.php
│   │   │   ├── CanNotFindBusinessInCertificationDirectorByCertificationId.php
│   │   │   ├── CanNotFindCertBusinessDiscountCodeByDiscountCode.php
│   │   │   ├── CanNotFindCertBusinessOrderByInvoiceNumber.php
│   │   │   └── CertifiedBusiness.php
│   │   ├── SentBusinessCertificationOnboardingEmail.php
│   │   └── SentBusinessCertificationWelcomeDetailsEmail.php
│   ├── CandidateExamination
│   │   ├── CandidateCertificateWasRevoked.php
│   │   ├── CandidateContactInformationWasChanged.php
│   │   ├── CandidateEmailWasChanged.php
│   │   ├── CandidateFailedTheirFirstExam.php
│   │   ├── CandidateFailedTheirRetakeExam.php
│   │   ├── CandidateId.php
│   │   ├── CandidatePassedTheirFirstExam.php
│   │   ├── CandidatePassedTheirRetakeExam.php
│   │   ├── Candidate.php
│   │   ├── CandidateWasAwardedACertificate.php
│   │   ├── CandidateWasDeniedACertificate.php
│   │   ├── CandidateWasInvitedToTheirExamRetake.php
│   │   ├── CandidateWasInvitedToTheirFirstExam.php
│   │   ├── CandidateWasRegisteredV2.php
│   │   ├── CanNotFailAnExamOfUnknownType.php
│   │   ├── CanNotPassAnExamOfUnknownType.php
│   │   ├── CanNotRegisterCandidate.php
│   │   ├── CertException.php
│   │   ├── ChangeCandidateContactInformation.php
│   │   ├── ChangeCandidateEmail.php
│   │   ├── CouldNotRegisterCandidateNoVouchersRemaining.php
│   │   ├── ExamId.php
│   │   ├── ExaminationProcessBegan.php
│   │   ├── ExaminationProcessEnded.php
│   │   ├── ExamMarkedForManualReview.php
│   │   ├── Exam.php
│   │   ├── ExamRetakeWasPlanned.php
│   │   ├── ExamVoucher.php
│   │   ├── ExamWasReviewed.php
│   │   ├── ExamWasScored.php
│   │   ├── FurtherExamApprovalWasIgnored.php
│   │   ├── IgnoreFurtherExamApproval.php
│   │   ├── InviteCandidateToExamRetake.php
│   │   ├── InviteCandidateToFirstExam.php
│   │   ├── LegacyExaminationProcessBegan.php
│   │   ├── LegacyExaminationProcessEnded.php
│   │   ├── LegacyExamWasFailed.php
│   │   ├── LegacyExamWasPassed.php
│   │   ├── LegacyExamWasReviewed.php
│   │   ├── LegacyExamWasScored.php
│   │   ├── Processes
│   │   │   ├── CannotJudgeExamWhenItHasNotBeenReviewed.php
│   │   │   ├── CannotJudgeExamWhenItHasNotBeenScored.php
│   │   │   ├── ExamJudgementDetails.php
│   │   │   ├── InviteRegisteredCandidatesToTheirFirstExam.php
│   │   │   ├── JudgeCandidateExamResults.php
│   │   │   ├── PlannedRetake.php
│   │   │   ├── RegisterCandidatesFromTypeform.php
│   │   │   ├── SendCandidateAwardedMessageToProveSource.php
│   │   │   ├── SendCandidateFailureAndSuccessNotifications.php
│   │   │   ├── SendExamRetakes.php
│   │   │   ├── SendPurchaserAnEmailWhenCandidateRegistrationsFail.php
│   │   │   ├── SubscribeCandidateToMailchimp.php
│   │   │   └── UntrustedClientConnection.php
│   │   ├── Projections
│   │   │   ├── CandidateExamListingProjection.php
│   │   │   ├── CandidateExam.php
│   │   │   ├── CandidateExamsRequiringManualApprovalProjection.php
│   │   │   ├── CandidateRegistrationListingProjection.php
│   │   │   ├── CandidateRegistration.php
│   │   │   ├── CanNotFindCandidateRegistration.php
│   │   │   ├── CannotFindExamInListing.php
│   │   │   └── ExamRequiringManualApproval.php
│   │   ├── RegisterCandidate.php
│   │   └── Versioned
│   │       ├── CandidateWasRegistered.php
│   │       ├── ExamInvitationWasSentToCandidate.php
│   │       ├── ExamInvitationWasSentToCandidateV2.php
│   │       └── ExamInvitationWasSentToCandidateV3.php
│   ├── CertBootstrap.php
│   ├── CertificateStatusesUpdated.php
│   ├── CertificationVerification
│   │   ├── CanNotVerifyDeveloper.php
│   │   ├── CertifiedDeveloperListing.php
│   │   └── CertifiedDeveloper.php
│   ├── CertInvoiceNumberDoesNotMatchCorrectFormat.php
│   ├── CertLogMessages.php
│   ├── CouldNotMatchExamRefundToOrder.php
│   ├── DiscountPrograms
│   │   ├── CanNotFindPaymentMethodForDiscountPurchase.php
│   │   ├── CountryCodeIsNotValid.php
│   │   ├── CountryCode.php
│   │   ├── CountryTierDefinition.php
│   │   ├── CountryTierDefinitions.php
│   │   ├── DiscountProgramEmails.php
│   │   ├── DiscountProgramsBootstrap.php
│   │   ├── DiscountTierDefinition.php
│   │   ├── DiscountTierDefinitions.php
│   │   ├── Economy
│   │   │   ├── ApproveUnvalidatedEconomyDiscountPurchase.php
│   │   │   ├── EconomyDiscountApplication.php
│   │   │   ├── EconomyDiscountApplicationWasReceived.php
│   │   │   ├── EconomyDiscountCountryListWasImported.php
│   │   │   ├── EconomyDiscountPurchaseVerificationFailed.php
│   │   │   ├── EconomyDiscountPurchaseWasMade.php
│   │   │   ├── EconomyDiscountTierListWasImported.php
│   │   │   ├── ImportEconomyDiscountCountryList.php
│   │   │   ├── ImportEconomyDiscountTierList.php
│   │   │   ├── Processes
│   │   │   │   ├── ReceiveEconomyDiscountApplicationsFromTypeform.php
│   │   │   │   ├── SendDiscountCodeToEconomyDiscountApplicant.php
│   │   │   │   ├── SendEconomyDiscountApplicationFailedEmailToCustomer.php
│   │   │   │   └── ValidateEconomyPurchaseMatchesDiscountCountryCode.php
│   │   │   └── Projections
│   │   │       ├── CanNotFindDiscountByCountryCode.php
│   │   │       ├── CanNotFindDiscountByDiscountCode.php
│   │   │       ├── CanNotFindUnvalidatedPurchaseByInvoiceNumber.php
│   │   │       ├── Discount.php
│   │   │       ├── EconomyDiscountTierDefinitionsProjection.php
│   │   │       └── ListOfPendingUnvalidatedEconomyDiscountPurchasesProjection.php
│   │   ├── Educational
│   │   │   ├── ApproveUnvalidatedEducationalDiscountPurchase.php
│   │   │   ├── EducationalDiscountApplication.php
│   │   │   ├── EducationalDiscountApplicationWasReceived.php
│   │   │   ├── EducationalDiscountCountryListWasImported.php
│   │   │   ├── EducationalDiscountPurchaseVerificationFailed.php
│   │   │   ├── EducationalDiscountPurchaseWasMade.php
│   │   │   ├── EducationalDiscountTierListWasImported.php
│   │   │   ├── ImportEducationalDiscountCountryList.php
│   │   │   ├── ImportEducationalDiscountTierList.php
│   │   │   ├── Processes
│   │   │   │   ├── ReceiveEducationalDiscountApplicationsFromTypeform.php
│   │   │   │   ├── SendDiscountCodeToEducationalApplicant.php
│   │   │   │   ├── SendEducationalDiscountApplicationFailedEmailToCustomer.php
│   │   │   │   └── ValidateEducationalPurchaseMatchesDiscountCountryCode.php
│   │   │   └── Projections
│   │   │       ├── CanNotFindDiscountByCountryCode.php
│   │   │       ├── CanNotFindDiscountByDiscountCode.php
│   │   │       ├── Discount.php
│   │   │       ├── EducationalDiscountTierDefinitionsProjection.php
│   │   │       └── ListOfPendingUnvalidatedEducationalDiscountPurchasesProjection.php
│   │   ├── Nonprofit
│   │   │   ├── ApproveUnvalidatedNonprofitDiscountPurchase.php
│   │   │   ├── ImportNonprofitDiscountCountryList.php
│   │   │   ├── ImportNonprofitDiscountTierList.php
│   │   │   ├── NonprofitDiscountApplication.php
│   │   │   ├── NonprofitDiscountApplicationWasReceived.php
│   │   │   ├── NonprofitDiscountCountryListWasImported.php
│   │   │   ├── NonprofitDiscountPurchaseVerificationFailed.php
│   │   │   ├── NonprofitDiscountPurchaseWasMade.php
│   │   │   ├── NonprofitDiscountTierListWasImported.php
│   │   │   ├── Processes
│   │   │   │   ├── ReceiveNonprofitDiscountApplicationsFromTypeform.php
│   │   │   │   ├── SendDiscountCodeToNonprofitApplicant.php
│   │   │   │   ├── SendNonprofitDiscountApplicationFailedEmailToCustomer.php
│   │   │   │   └── ValidateNonprofitPurchaseMatchesDiscountCountryCode.php
│   │   │   └── Projections
│   │   │       ├── CanNotFindDiscountByCountryCode.php
│   │   │       ├── CanNotFindDiscountByDiscountCode.php
│   │   │       ├── Discount.php
│   │   │       ├── ListOfPendingUnvalidatedNonprofitDiscountPurchasesProjection.php
│   │   │       └── NonprofitDiscountTierDefinitionsProjection.php
│   │   ├── Processes
│   │   │   ├── ResumeProcessingOfApproveUnvalidatedPurchases.php
│   │   │   └── SubscribeDiscountApplicantsToMailchimp.php
│   │   ├── Projections
│   │   │   ├── DiscountApplicant.php
│   │   │   ├── DiscountApplicantsProjection.php
│   │   │   ├── DiscountCodeOrderReportProjection.php
│   │   │   └── DiscountOrder.php
│   │   ├── UnvalidatedDiscountPurchaseWasApproved.php
│   │   ├── UnvalidatedPurchase.php
│   │   ├── UploadedCountryTierCsvIsNotCompatible.php
│   │   └── UploadedDiscountTierCsvIsNotCompatible.php
│   ├── Emails
│   │   ├── cannot-register-candidate-no-more-vouchers-email.twig
│   │   ├── CertEmails.php
│   │   ├── certificate-awarded-email.twig
│   │   ├── certificate-first-denial-email.twig
│   │   ├── certificate-retake-denial-email.twig
│   │   ├── InviteCandidateToExamEmail.twig
│   │   ├── InviteCandidateToRetakeTheExam.twig
│   │   └── InvitePurchaserToRegisterCandidates.twig
│   ├── ExamPlatform
│   │   ├── ApproveExam.php
│   │   ├── CandidateContactDetailsWereProvided.php
│   │   ├── CanNotDetermineWhichCertificateDenialEmailToSend.php
│   │   ├── CanNotDownloadCertificatePdfForVoucher.php
│   │   ├── DenyExam.php
│   │   ├── DownloadAndImportExamPlatformPurchaseList.php
│   │   ├── GetCandidateDetails.php
│   │   ├── GetCertificatePdf.php
│   │   ├── GetPurchaseList.php
│   │   ├── GetVoucher.php
│   │   ├── MonitorWebhooksToIdentifyExamPlatformEvents.php
│   │   └── VoucherId.php
│   ├── ExamPlatformPurchasesWereImported.php
│   ├── ExamPurchasedFulfilledThroughProctorExamAnalysis.php
│   ├── ExamPurchaseWasFulfilled.php
│   ├── ExamPurchaseWasMade.php
│   ├── ExamPurchaseWasRefundedByQuadernoImport.php
│   ├── ExamPurchaseWasRefunded.php
│   ├── ExamVouchersWereIssued.php
│   ├── Fulfillment
│   │   ├── IdentifyFulfilledOrders.php
│   │   └── SalesVoucherWasIssued.php
│   ├── IdentifyRefunds.php
│   ├── ImportExamPlatformPurchases.php
│   ├── ImportId.php
│   ├── InterpretImportedExamPurchases.php
│   ├── InvoiceNumber.php
│   ├── PartnerProgram
│   │   ├── CertPartnerProgramBootstrap.php
│   │   ├── cert-partner-program.md
│   │   ├── CouldNotCreatePartnershipDiscountCode.php
│   │   ├── CouldNotSendPartnershipDiscountCode.php
│   │   ├── PartnerProgramConfiguration.php
│   │   ├── PartnerProgramEmails.php
│   │   ├── PartnerProgramPurchaseWasMadeThroughQuaderno.php
│   │   ├── PartnershipBegan.php
│   │   ├── PartnershipDiscountCodeWasAdded.php
│   │   ├── PartnershipId.php
│   │   ├── Partnership.php
│   │   ├── PartnershipProgramDiscountCodeWasSent.php
│   │   └── Processes
│   │       ├── BeginPartnerships.php
│   │       ├── CreatePartnershipDiscountCodes.php
│   │       ├── IdentifyPartnerProgramPurchases.php
│   │       └── SendPartnershipDiscountCodeEmails.php
│   ├── Proctor
│   │   ├── CanNotFindExamIdForProctorId.php
│   │   ├── CreateProctorExam.php
│   │   ├── ExamContainsNoStudentSessions.php
│   │   ├── Exam.php
│   │   ├── ExamWasStarted.php
│   │   ├── MonitorWebhooksToIdentifyProctorExamEvents.php
│   │   ├── ProctorApi.php
│   │   ├── ProctorApiResponse.php
│   │   ├── ProctorExamId.php
│   │   ├── ProctorExam.php
│   │   ├── ReviewStatus.php
│   │   ├── StudentExam.php
│   │   ├── Student.php
│   │   └── UpdateCompletedProctorExams.php
│   ├── ProctorExamDataWasUpdated.php
│   ├── Purchasing
│   │   ├── CancelOrder.php
│   │   ├── ExamCreditCardPurchaseWasMade.php
│   │   ├── ExamOrderWasCanceled.php
│   │   ├── ExamPaypalPurchaseWasMade.php
│   │   ├── ExamPurchaseInvoiceWasCreated.php
│   │   ├── ExamPurchaseInvoiceWasPaid.php
│   │   ├── ExamPurchaseWasMade.php
│   │   ├── ExamPurchaseWasRefundedV2.php
│   │   ├── IdentifyExamPurchaseEvents.php
│   │   ├── PlaceInvoiceOrder.php
│   │   ├── Processes
│   │   │   ├── SendPurchaserInvitationToRegisterCandidates.php
│   │   │   └── SubscribePurchaserToMailchimp.php
│   │   ├── Projections
│   │   │   ├── CanNotFindExamVoucherOrder.php
│   │   │   ├── ExamVoucherOrderListingProjection.php
│   │   │   └── ExamVoucherOrder.php
│   │   └── SpanishCertificationPreorderWasMade.php
│   ├── Quaderno
│   │   ├── CreditId.php
│   │   ├── CreditNumber.php
│   │   ├── InvoiceWasConvertedToCredit.php
│   │   ├── MonitorWebhooksToIdentifyQuadernoEvents.php
│   │   ├── Projections
│   │   │   ├── CanNotFindQuadernoCreditWithCreditNumber.php
│   │   │   ├── CanNotFindQuadernoInvoiceWithInvoiceNumber.php
│   │   │   ├── CertCreditNumberDoesNotMatchCorrectFormat.php
│   │   │   ├── QuadernoInvoiceListing.php
│   │   │   └── QuadernoInvoiceListingProjection.php
│   │   ├── QuadernoCreditCreated.php
│   │   ├── QuadernoCredit.php
│   │   ├── QuadernoCreditUpdated.php
│   │   ├── QuadernoException.php
│   │   ├── QuadernoInvoiceCreated.php
│   │   ├── QuadernoInvoice.php
│   │   ├── QuadernoInvoiceUpdated.php
│   │   ├── QuadernoPaymentCreated.php
│   │   ├── TestInvoiceId.php
│   │   └── TestInvoiceWasCreated.php
│   ├── SearchForFulfilledOrdersUsingProctorExamAndCandidateRegistrationData.php
│   ├── SearchNewProctorExamDataForFulfilledOrders.php
│   ├── UpdateProctorExamDataNightly.php
│   └── Webinars
│       ├── Processes
│       │   ├── MonitorQuadernoEventsForWebinarPurchases.php
│       │   ├── MonitorWebinarsForCapacity.php
│       │   └── SendThankYouEmailToWebinarRegistrants.php
│       ├── WebinarCapacityWasChanged.php
│       ├── WebinarEmails.php
│       ├── WebinarPurchaseWasMade.php
│       └── WebinarsBootstrap.php
├── Charts
│   ├── ChartBootstrap.php
│   ├── Chart.php
│   ├── LineChart.php
│   ├── Quickchart.php
│   └── SendExampleChartToBot.php
├── Csv
│   └── Csv.php
├── CustomerSupport
│   └── ScanSupportTicketsForHelpfulContent.php
├── Database
│   ├── CanNotCommitMigration.php
│   ├── create_migrations_table.sql
│   ├── DatabasesBootstrap.php
│   ├── MgmtDb.php
│   ├── MigrationPaths.php
│   ├── Migrations.php
│   └── ResetDatabaseForTesting.php
├── Development
│   ├── Deployment
│   │   ├── DeploymentCompleted.php
│   │   ├── DeploymentId.php
│   │   └── IdentifyForgeDeploymentHooks.php
│   ├── DeveloperNoteId.php
│   ├── DeveloperNoteListing.php
│   ├── DeveloperNoteListingProjection.php
│   ├── DeveloperNoteWasLeft.php
│   ├── DevelopmentBootstrap.php
│   ├── DevelopmentException.php
│   ├── FeedAnEventIntoAListener.php
│   ├── HtmlDocumentationEnrichment.php
│   ├── InvalidEventListenerSpecified.php
│   └── LeaveDeveloperNote.php
├── EventManagement
│   ├── Charts
│   │   ├── SalesLineChart.php
│   │   └── Theme.php
│   ├── EventManagementBootstrap.php
│   ├── Events
│   │   ├── AddEvent.php
│   │   ├── CouldNotFindEvent.php
│   │   ├── EventId.php
│   │   ├── EventListing.php
│   │   ├── EventListingProjection.php
│   │   ├── Event.php
│   │   ├── EventWasAdded.php
│   │   ├── EventWasRenamed.php
│   │   └── RenameEvent.php
│   ├── HtmlFormattedEventStream.php
│   ├── Projections
│   │   ├── EventSale.php
│   │   └── EventSalesProjection.php
│   └── Ticketing
│       ├── BillingAddress.php
│       ├── BindTitoEventIdToEvent.php
│       ├── CanNotFindTitoEventByEventId.php
│       ├── ConvertTitoWebhooksToDomainEvents.php
│       ├── NotifyCustomerThatTheirPaymentWasReceived.php
│       ├── PaymentWasReceivedEmail.twig
│       ├── Reports
│       │   ├── FiveDaySalesReport.php
│       │   ├── Sale.php
│       │   ├── SalesTotal.php
│       │   └── TicketSalesProjection.php
│       ├── TicketingEmails.php
│       ├── TicketPurchaseListing.php
│       ├── TitoEventId.php
│       ├── TitoEventIdWasBoundToEvent.php
│       ├── TitoEventIdWasBoundToEventV2.php
│       ├── TitoEvent.php
│       ├── TitoEventsListing.php
│       ├── TitoOrderId.php
│       ├── TitoOrderWasCancelled.php
│       ├── TitoOrderWasCompleted.php
│       ├── TitoOrderWasFinished.php
│       ├── TitoOrderWasPaid.php
│       ├── TitoOrderWasUpdated.php
│       ├── TitoTicketId.php
│       ├── TitoTicket.php
│       ├── TitoTickets.php
│       ├── TitoTicketWasCompleted.php
│       ├── TitoTicketWasCreated.php
│       ├── TitoTicketWasReassigned.php
│       ├── TitoTicketWasUnvoided.php
│       ├── TitoTicketWasUpdated.php
│       ├── TitoTicketWasVoided.php
│       └── UnpaidInvoiceReminders
│           ├── EmailPaymentReminderCouldNotBeSent.php
│           ├── EmailPaymentReminderWasSent.php
│           ├── FirstPaymentReminderEmail.twig
│           ├── IdentifiedInvoiceOrderForPaymentReminder.php
│           ├── IdentifyOverdueInvoiceOrders.php
│           ├── InvoiceOrderContactEmailBounced.php
│           ├── InvoiceOrderWasCancelled.php
│           ├── InvoiceOrderWasPaid.php
│           ├── InvoiceOrderWasPlaced.php
│           ├── MonitorTitoInvoiceOrders.php
│           ├── OrderPaymentReminderSecondEmail.twig
│           ├── OrderPaymentReminderThirdEmail.twig
│           ├── SendUnpaidInvoiceReminderEmails.php
│           ├── StoppedTrackingOrderBecauseEventIsOver.php
│           ├── StoppedWatchingUnpaidInvoiceOrdersBecauseEventIsOver.php
│           ├── UnpaidInvoiceOrdersListingProjection.php
│           └── UnpaidInvoiceReminderEmails.php
├── EventSourcing
│   ├── EventCanNotBeFoundByDatabaseId.php
│   ├── EventStoreMaintenance.php
│   ├── ListenerMaintenance.php
│   └── ProjectionMaintenance.php
├── FeatureFlags
│   ├── Feature.php
│   └── Features.php
├── Freshdesk
│   ├── InvalidFreshdeskApiCredentials.php
│   └── Ticket.php
├── functions.php
├── Google
│   ├── AccessTokenIsNoLongerValid.php
│   ├── AccessToken.php
│   ├── AccessTokenResponseIsInvalid.php
│   ├── AccessTokenResponse.php
│   ├── ApiCredentials.php
│   ├── Api.php
│   ├── GoogleBootstrap.php
│   ├── GoogleCalendarApi.php
│   ├── GoogleCalendarOauthAccessTokenHasExpired.php
│   └── GoogleCalendar.php
├── Hopin
│   ├── CanNotCreateTickets.php
│   ├── CreateHiddenHopinTickets.php
│   ├── HopinBootstrap.php
│   ├── HopinRegistrationWasCreated.php
│   ├── HopinTicketReference.php
│   ├── IdentifyHopinWebhookEvents.php
│   └── Projections
│       ├── CanNotFindHopinRegistrationForRegistrationId.php
│       ├── HopinRegistration.php
│       └── HopinRegistrations.php
├── IngBanking
│   ├── AccountId.php
│   ├── Account.php
│   ├── Api
│   │   ├── AccountResponse.php
│   │   ├── AccountsResponse.php
│   │   ├── BookedTransactions.php
│   │   ├── PendingTransactions.php
│   │   └── TransactionsResponse.php
│   ├── Bban.php
│   ├── Bic.php
│   ├── EndToEndId.php
│   ├── Iban.php
│   ├── Name.php
│   ├── RemittanceInformation.php
│   ├── TransactionId.php
│   └── Transaction.php
├── LaraconEu
│   ├── LaraconEuBootstrap.php
│   ├── LaraconEu.md
│   └── Online
│       ├── BulkPurchaseForm.php
│       ├── BulkPurchaseId.php
│       ├── CouldNotCreateFreeConferenceTicketForAWebinarCustomer.php
│       ├── CouldNotCreateInvoiceForLaraconEuOnlineBulkPurchase.php
│       ├── CouldNotCreateInvoiceForLaraconEuOnlineHopinTicket.php
│       ├── CouldNotCreateTicketsForLaraconEuOnlineBulkPurchase.php
│       ├── CreateLaraconEuEventTickets.php
│       ├── FreeConferenceTicketForWebinarCustomerWasSent.php
│       ├── FreeConferenceTicketWasCreatedForAWebinarCustomer.php
│       ├── HopinTicketsForALaraconEUOnlineBulkPurchaseWereCreated.php
│       ├── InvoiceRequestForm.php
│       ├── LaraconEuHopinCustomerWasSentTheirInvoice.php
│       ├── LaraconEuInvoiceRequestWasReceived.php
│       ├── LaraconEuMoneybirdInvoiceForAHopinTicketWasCreated.php
│       ├── LaraconEuOnlineBulkPurchaseWasMade.php
│       ├── LaraconEuOnlineBulkTicketPurchaseDetailsWereSent.php
│       ├── LaraconEuOnlineEmails.php
│       ├── LaraconEuOnlineEventTicketsWereCreated.php
│       ├── LaraconEuOnlineMoneybirdInvoiceForBulkPurchasesWasCreated.php
│       ├── Processes
│       │   ├── CreateConferenceTicketsForWebinarCustomers.php
│       │   ├── CreateHopinTicketsForBulkPurchases.php
│       │   ├── GenerateInvoiceForBulkPurchases.php
│       │   ├── GenerateInvoiceForHopinPurchases.php
│       │   ├── IdentifyBulkPurchaseEventsFromWebhook.php
│       │   ├── IdentifyInvoiceRequestFormSubmissionsFromWebhook.php
│       │   ├── SendBulkTicketPurchasersTheirTicketAndInvoiceEmail.php
│       │   ├── SendConferenceTicketEmailToWebinarCustomer.php
│       │   ├── SendHopinCustomersAnInvitationToTheTaxDetailCollectionForm.php
│       │   ├── SendHopinCustomersTheirInvoice.php
│       │   └── SendLaraconEuOnlineTicketEmail.php
│       ├── Projections
│       │   ├── BulkPurchase.php
│       │   ├── BulkPurchases.php
│       │   ├── CanNotFindBulkPurchaseForBulkPurchaseId.php
│       │   ├── CanNotFindHopinInvoiceForRegistrationId.php
│       │   ├── CanNotFindInvoiceRequestForRegistration.php
│       │   ├── CreatedInvoice.php
│       │   ├── CreatedLaraconEuOnlineEventTickets.php
│       │   ├── CreatedTicket.php
│       │   ├── HopinInvoice.php
│       │   ├── HopinInvoices.php
│       │   ├── InvoiceRequest.php
│       │   └── InvoiceRequests.php
│       └── TicketCreationId.php
├── Logging
│   ├── CanNotFindLogEntryById.php
│   ├── Category.php
│   ├── EventHistoryLog.php
│   ├── LogEntryId.php
│   ├── LogEntry.php
│   ├── LoggingBootstrap.php
│   ├── LogMessageResolution.php
│   └── LogMessages.php
├── Mailchimp
│   ├── MailchimpApi.php
│   ├── MailchimpBootstrap.php
│   └── Mailchimp.php
├── Mailing
│   ├── EmailAddressIsNotValid.php
│   └── Email.php
├── MgmtException.php
├── Money
│   ├── CurrenciesDontMatch.php
│   ├── Currency.php
│   ├── Money.php
│   └── MoneyStringIsInvalid.php
├── Moneybird
│   ├── AccessTokenIsNoLongerValid.php
│   ├── AccessTokenResponseIsInvalid.php
│   ├── AccessTokenResponse.php
│   ├── ApiCredentials.php
│   ├── Api.php
│   ├── CanNotDownloadFile.php
│   ├── CanNotRetrieveAdministrationIdFromMoneybirdApi.php
│   ├── Contact.php
│   ├── Invoice.php
│   ├── LineItem.php
│   ├── MoneybirdBootstrap.php
│   ├── MoneybirdCanNotCreateContact.php
│   ├── MoneybirdException.php
│   ├── Moneybird.php
│   └── Payment.php
├── NewTelegram
│   ├── CanNotGetWebhookInfoFromTelegram.php
│   ├── Group.php
│   ├── Message.php
│   ├── Receive
│   │   ├── CanNotFindAMethodForRoutingReceivedCommand.php
│   │   ├── CanNotOverwriteTelegramCommandWithTheSameName.php
│   │   ├── CanNotParseARoutableMethodFromReceivedCommand.php
│   │   ├── Chat.php
│   │   ├── InvalidTelegramCommandArguments.php
│   │   ├── MessageEntity.php
│   │   ├── ReceivedCommand.php
│   │   ├── ReceivedMessage.php
│   │   ├── RouteParameters.php
│   │   ├── Sender.php
│   │   ├── TelegramCommand.php
│   │   └── TelegramCommandRouter.php
│   └── TelegramException.php
├── Postmark
│   ├── Attachment.php
│   ├── ConvertPostmarkWebhooksToDomainEvents.php
│   ├── ErrorResponse.php
│   ├── LaraconEUMailer.php
│   ├── LaravelCertificationMailer.php
│   ├── Mail.php
│   ├── MessageId.php
│   ├── PostmarkApi.php
│   ├── PostmarkBootstrap.php
│   ├── PostmarkEmailBounced.php
│   ├── PostmarkEmailLinkWasClicked.php
│   ├── PostmarkEmailWasDelivered.php
│   ├── PostmarkEmailWasOpened.php
│   ├── PostmarkLaraconEuMailer.php
│   ├── PostmarkLaravelCertificationMailer.php
│   ├── PostmarkMailer.php
│   ├── PostmarkMetadataFieldLengthsCannotBeLongerThan20Characters.php
│   ├── PostmarkMetadataValueLengthsCannotBeLongerThan80Characters.php
│   ├── Projections
│   │   ├── BounceData.php
│   │   ├── MailingEventHistoryProjection.php
│   │   ├── MailingEvent.php
│   │   ├── Metadata.php
│   │   └── RecipientData.php
│   ├── ReceivedAPostmarkSpamComplaint.php
│   └── SuccessResponse.php
├── Profiling
│   └── ProfileRequest.php
├── Quaderno
│   ├── Address.php
│   ├── BankAccount.php
│   ├── CanNotCreateContact.php
│   ├── CanNotCreateCountry.php
│   ├── CanNotCreateCoupon.php
│   ├── CanNotCreateLanguage.php
│   ├── CanNotCreateUnrecognizedKind.php
│   ├── CanNotFindQuadernoItemByCode.php
│   ├── CanNotValidateUrl.php
│   ├── CanNotValidateVatNumber.php
│   ├── ContactEmail.php
│   ├── ContactName.php
│   ├── Contact.php
│   ├── Country.php
│   ├── CouponCode.php
│   ├── CurlQuadernoApi.php
│   ├── Currency.php
│   ├── FullName.php
│   ├── InvoiceItems.php
│   ├── Invoice.php
│   ├── Item.php
│   ├── Kind.php
│   ├── Language.php
│   ├── PrimaryAddress.php
│   ├── QuadernoApi.php
│   ├── QuadernoBootstrap.php
│   ├── QuadernoContact.php
│   ├── QuadernoException.php
│   ├── QuadernoItem.php
│   ├── QuadernoItems.php
│   ├── QuadernoPayment.php
│   ├── QuadernoPayments.php
│   ├── SecondaryAddress.php
│   ├── Tax.php
│   ├── VatNumber.php
│   └── WebUrl.php
├── Shell
│   ├── ShellCommandFailed.php
│   └── ShellCommand.php
├── Storage
│   ├── CanNotDeleteLocalFile.php
│   ├── CanNotDownloadFile.php
│   ├── CanNotIdentifyRootPathForFileManagement.php
│   ├── CanNotStoreFileLocally.php
│   ├── FileManagement.php
│   ├── PublicS3.php
│   ├── S3Details.php
│   ├── S3.php
│   ├── StorageBootstrap.php
│   └── StorageException.php
├── Stripe
│   ├── Balance.php
│   ├── example-payloads
│   │   ├── balance.available.json
│   │   └── balance-object.json
│   ├── IdentifyStripeEventsFromWebhooks.php
│   ├── Iso4217Currency.php
│   ├── SourceType.php
│   ├── StripeAvailableBalanceWasUpdated.php
│   ├── StripeBootstrap.php
│   ├── StripeChargeSucceeded.php
│   ├── StripeRequest.php
│   └── ThreeLetterCurrencyCodeIsNotValid.php
├── SupportTickets
│   ├── FreshdeskTicketWasClosed.php
│   ├── MonitorWebhooksForSupportTicketEvents.php
│   ├── SupportTicketsBootstrap.php
│   └── TicketId.php
├── Telegram
│   ├── Group.php
│   ├── Message.php
│   └── TelegramBootstrap.php
├── Templating
│   ├── CamelCaseTransformsExtension.php
│   └── TwigExtensionsBootstrap.php
├── Test
│   ├── TestBootstrap.php
│   └── TestEvent.php
├── TextFormatting
│   ├── AnsiCodes.php
│   ├── Ansi.php
│   ├── SyntaxHighlighting.php
│   ├── TextRecordListing.php
│   └── TextTable.php
├── Time
│   ├── ADayHasPassed.php
│   ├── AnHourHasPassed.php
│   ├── Clock.php
│   ├── Date.php
│   ├── DayPassingEventIsntTriggered.php
│   ├── HourPassingEventIsntTriggered.php
│   ├── ServerClock.php
│   ├── TimeBootstrap.php
│   ├── TimeSanityCheck.php
│   └── TimezoneReport.php
├── Typeform
│   ├── Answer.php
│   ├── CanNotFindAnswerToQuestion.php
│   ├── CanNotFindHiddenValueInTypeform.php
│   ├── Form.php
│   └── Question.php
├── UserManagement
│   ├── CannotAddDuplicateCapability.php
│   ├── CapabilityNotSupported.php
│   ├── Capability.php
│   ├── CouldNotFindUser.php
│   ├── GlobalCapabilities.php
│   ├── GlobalCapability.php
│   ├── GrantGlobalCapability.php
│   ├── UserId.php
│   ├── UserListing.php
│   └── User.php
├── Web
│   ├── Auth
│   │   ├── Auth.php
│   │   ├── AuthRoutes.php
│   │   ├── ForwardLoggedInUsersToDashboard.php
│   │   ├── LoginController.php
│   │   ├── LoginForm.php
│   │   ├── login-form.twig
│   │   └── LogoutController.php
│   ├── Bot
│   │   ├── BotRoutes.php
│   │   ├── SendCertLogToMgmtController.php
│   │   ├── SendToMgmtController.php
│   │   ├── SmartListener.php
│   │   └── TelegramReceivedController.php
│   ├── Cert
│   │   ├── approve-exam-confirmation.twig
│   │   ├── BusinessCertification
│   │   │   ├── BusinessCertificationRoutes.php
│   │   │   ├── CertifiedBusinessListingController.php
│   │   │   └── certified-business-listing.twig
│   │   ├── CandidateDetailsController.php
│   │   ├── candidate-details.twig
│   │   ├── CandidateExamination
│   │   │   ├── ApproveExamController.php
│   │   │   ├── ClearExamRequiringManualApprovalController.php
│   │   │   ├── DenyExamController.php
│   │   │   ├── ExamsRequiringManualApprovalController.php
│   │   │   ├── exams-that-require-manual-approval.twig
│   │   │   ├── force-approve-exam-confirmation.twig
│   │   │   ├── ForceApproveExamController.php
│   │   │   ├── ForceApproveExamForm.php
│   │   │   ├── RegisterCandidateController.php
│   │   │   ├── RegisterCandidateForm.php
│   │   │   └── register-candidate-form.twig
│   │   ├── CandidateRegistrationListingController.php
│   │   ├── candidate-registration-listing.twig
│   │   ├── CanManageCert.php
│   │   ├── CertRoutes.php
│   │   ├── ChangeCandidateContactInformationController.php
│   │   ├── ChangeCandidateContactInformationForm.php
│   │   ├── change-candidate-contact-information-form.twig
│   │   ├── change-candidate-name-command-view.twig
│   │   ├── ChangeCandidateNameOnCertificateController.php
│   │   ├── ChangeCandidateNameOnCertificateForm.php
│   │   ├── change-candidate-name-on-certificate-form.twig
│   │   ├── deny-exam-confirmation.twig
│   │   ├── DiscountPrograms
│   │   │   ├── DiscountApplicantsController.php
│   │   │   ├── DiscountApplicantsCsvController.php
│   │   │   ├── discount-applicants.twig
│   │   │   ├── DiscountCodeOrderReportController.php
│   │   │   ├── DiscountCodeOrderReportCsvController.php
│   │   │   ├── discount-code-order-report.twig
│   │   │   ├── DiscountProgramsController.php
│   │   │   ├── discount-programs-index.twig
│   │   │   ├── Economy
│   │   │   │   ├── ApproveUnvalidatedEconomyDiscountPurchaseController.php
│   │   │   │   ├── UploadEconomyPricingSpreadsheetController.php
│   │   │   │   ├── UploadEconomyPricingSpreadsheetForm.php
│   │   │   │   └── upload-pricing-spreadsheet-form.twig
│   │   │   ├── Educational
│   │   │   │   ├── ApproveUnvalidatedEducationalDiscountPurchaseController.php
│   │   │   │   ├── UploadEducationalPricingSpreadsheetController.php
│   │   │   │   ├── UploadEducationalPricingSpreadsheetForm.php
│   │   │   │   └── upload-pricing-spreadsheet-form.twig
│   │   │   ├── Nonprofit
│   │   │   │   ├── ApproveUnvalidatedNonprofitDiscountPurchaseController.php
│   │   │   │   ├── UploadNonprofitPricingSpreadsheetController.php
│   │   │   │   ├── UploadNonprofitPricingSpreadsheetForm.php
│   │   │   │   └── upload-pricing-spreadsheet-form.twig
│   │   │   ├── UnvalidatedPurchasesController.php
│   │   │   └── unvalidated-purchases.twig
│   │   ├── ExamListingController.php
│   │   ├── exam-listing.twig
│   │   ├── ExamVoucherOrderListingController.php
│   │   ├── ExamVoucherOrderListingCsvController.php
│   │   ├── exam-voucher-order-listing.twig
│   │   ├── invite-candidate-to-first-exam-confirmation.twig
│   │   ├── InviteCandidateToFirstExamController.php
│   │   ├── invite-candidate-to-retake-exam-confirmation.twig
│   │   ├── InviteCandidateToRetakeExamController.php
│   │   ├── InvoiceRequest
│   │   │   ├── InvoiceRequestFormController.php
│   │   │   ├── InvoiceRequestForm.php
│   │   │   └── InvoiceRequestForm.twig
│   │   ├── PlannedRetakeListingController.php
│   │   ├── planned-retake-listing.twig
│   │   ├── ProctorExamListingController.php
│   │   ├── proctor-exam-listing.twig
│   │   ├── Quaderno
│   │   │   ├── QuadernoToolsIndexController.php
│   │   │   ├── quaderno-tools-index.twig
│   │   │   ├── ViewQuadernoEvidenceController.php
│   │   │   ├── ViewQuadernoEvidenceForm.php
│   │   │   ├── view-quaderno-evidence-form.twig
│   │   │   └── view-quaderno-evidence.twig
│   │   ├── ResendCandidateExamInvitationController.php
│   │   ├── resend-candidate-exam-invitation.twig
│   │   ├── ResendCandidateFailedFirstExamNotificationController.php
│   │   ├── resend-candidate-failed-first-exam-notification.twig
│   │   ├── ResendCandidateFailedRetakeExamNotificationController.php
│   │   ├── resend-candidate-failed-retake-exam-notification.twig
│   │   ├── ResendCandidateRegistrationInvitationController.php
│   │   ├── ResendCandidateSuccessNotificationController.php
│   │   ├── resend-candidate-success-notification.twig
│   │   ├── SendCandidateRegistrationToNewEmailFormController.php
│   │   ├── SendCandidateRegistrationToNewEmailForm.php
│   │   ├── send-candidate-registration-to-new-email-form.twig
│   │   └── SendFirstExamInvitationToCandidateController.php
│   ├── ChartController.php
│   ├── Chart.twig
│   ├── Development
│   │   ├── CanManageAppDevelopment.php
│   │   ├── ChartTestController.php
│   │   ├── Dashboard
│   │   │   ├── DashboardController.php
│   │   │   └── dashboard.twig
│   │   ├── DeveloperNoteListingController.php
│   │   ├── DeveloperNoteListing.twig
│   │   ├── DevelopmentRoutes.php
│   │   ├── DocumentationController.php
│   │   ├── Documentation.twig
│   │   ├── DomainEventFeederController.php
│   │   ├── DomainEventFeederForm.php
│   │   ├── domain-event-feeder-form.twig
│   │   ├── DomainEventListController.php
│   │   ├── domain-event-list.twig
│   │   ├── DomainEventViewerController.php
│   │   ├── domain-event-viewer.twig
│   │   ├── EndpointTestController.php
│   │   ├── LeaveDeveloperNoteController.php
│   │   ├── LeaveDeveloperNoteForm.twig
│   │   ├── MailingEventListingController.php
│   │   ├── mailing-event-listing.twig
│   │   ├── MailingEventsToRecipientController.php
│   │   ├── mailing-events-to-recipient.twig
│   │   ├── mailing-event.twig
│   │   ├── nord-syntax-highlighting.twig
│   │   ├── PhpInfoController.php
│   │   ├── ProcessManagement
│   │   │   ├── ProcessListingController.php
│   │   │   ├── ProcessListing.twig
│   │   │   └── UnpaidInvoiceReminders
│   │   │       ├── IdentifyUnpaidInvoiceProcessController.php
│   │   │       ├── IdentifyUnpaidInvoiceProcess.twig
│   │   │       ├── MonitorTitoInvoiceOrdersProcessController.php
│   │   │       ├── MonitorTitoInvoiceOrdersProcess.twig
│   │   │       ├── ProcessOverviewController.php
│   │   │       ├── ProcessOverview.twig
│   │   │       ├── SendUnpaidInvoiceReminderProcessController.php
│   │   │       └── SendUnpaidInvoiceReminderProcess.twig
│   │   ├── TestProveSourceIntegrationController.php
│   │   ├── TimeoutTestController.php
│   │   └── WebsocketTestControllers.php
│   ├── EventManagement
│   │   ├── EventManagementRoutes.php
│   │   └── SalesChartController.php
│   ├── formatted-event-stream.twig
│   ├── Forms
│   │   ├── CannotRenderForm.php
│   │   ├── Field.php
│   │   ├── Form.php
│   │   ├── Old
│   │   │   ├── Field.php
│   │   │   ├── FormFieldNotFound.php
│   │   │   ├── FormModelController.php
│   │   │   ├── FormModel.php
│   │   │   └── Form.php
│   │   ├── Outcome.php
│   │   ├── Rules
│   │   │   └── Required.php
│   │   └── Validation.php
│   ├── form.twig
│   ├── Freshdesk
│   │   ├── CanUseFreshdeskPlugin.php
│   │   ├── CertificationSupport.twig
│   │   ├── CustomerSupport.twig
│   │   ├── FreshdeskCertificationSupportController.php
│   │   ├── FreshdeskCustomerSupportController.php
│   │   ├── FreshdeskPluginLoadingController.php
│   │   ├── FreshdeskRoutes.php
│   │   └── FreshdeskTicketingSupportController.php
│   ├── functions.php
│   ├── Global
│   │   ├── Layouts
│   │   │   ├── admin-with-sidebar-layout.twig
│   │   │   ├── DefaultAdmin.twig
│   │   │   ├── DefaultAdminWithSidebar.twig
│   │   │   └── plain-no-sidebar-layout.twig
│   │   └── Partials
│   │       ├── AdminPageFooter.twig
│   │       ├── KitchenSink.twig
│   │       ├── Logo.twig
│   │       └── WIP
│   │           ├── 3-Forms.css
│   │           └── Progress.twig
│   ├── Google
│   │   ├── GoogleOauthAuthorizationController.php
│   │   ├── GoogleOauthCallbackController.php
│   │   ├── GoogleRoutes.php
│   │   └── oauth.twig
│   ├── LaraconEu
│   │   ├── LaraconEuRoutes.php
│   │   └── Online
│   │       ├── BulkPurchasesController.php
│   │       ├── bulk-purchases.twig
│   │       ├── CreatedTicketsController.php
│   │       ├── created-tickets.twig
│   │       ├── CreateTicketForm.php
│   │       ├── CreateTicketFromCsvForm.php
│   │       ├── CreateTicketsController.php
│   │       ├── CreateTicketsFromCsvController.php
│   │       ├── create-tickets-from-csv.twig
│   │       ├── create-tickets.twig
│   │       ├── DownloadCreatedTicketsCsv.php
│   │       ├── GenerateInvoiceForBulkOrderController.php
│   │       ├── generate-invoice-for-bulk-order.twig
│   │       ├── GenerateTicketsForBulkOrderController.php
│   │       ├── generate-tickets-for-bulk-order.twig
│   │       ├── HopinInvoicesController.php
│   │       ├── hopin-invoices.twig
│   │       ├── HopinRegistrationsController.php
│   │       ├── hopin-registrations.twig
│   │       ├── InvoiceRequestsController.php
│   │       ├── invoice-requests.twig
│   │       ├── RetryInvoiceCreationForHopinOrderController.php
│   │       ├── retry-invoice-creation-for-hopin-order-error.twig
│   │       ├── retry-invoice-creation-for-hopin-order.twig
│   │       ├── SendHopinInvoiceRequestEmailController.php
│   │       ├── send-hopin-invoice-request-form.twig
│   │       ├── SendTicketsFromCsvController.php
│   │       ├── send-tickets-from-csv.twig
│   │       ├── TriggerBulkPurchaseEmailSendController.php
│   │       └── trigger-bulk-purchase-email-send.twig
│   ├── Methods
│   │   ├── AllowCorsController.php
│   │   ├── OptionsController.php
│   │   └── OptionsMethod.php
│   ├── Moneybird
│   │   ├── MoneybirdOauthAuthorizationController.php
│   │   ├── MoneybirdOauthCallbackController.php
│   │   ├── MoneybirdRoutes.php
│   │   └── oauth.twig
│   ├── Pagination
│   │   ├── Page.php
│   │   ├── PaginationBuilder.php
│   │   └── Pagination.php
│   ├── Routes.php
│   ├── UserManagement
│   │   ├── AddUserController.php
│   │   ├── AddUserForm.twig
│   │   ├── CanManageUsers.php
│   │   ├── ChangePasswordController.php
│   │   ├── ChangePasswordForm.php
│   │   ├── change-password-form.twig
│   │   ├── LoginAsController.php
│   │   ├── ManageGlobalCapabilitiesController.php
│   │   ├── ManageGlobalCapabilitiesForm.twig
│   │   ├── UserListingController.php
│   │   ├── user-listing.twig
│   │   ├── UserManagementRoutes.php
│   │   ├── UsersOnly.php
│   │   ├── ViewUserController.php
│   │   └── view-user.twig
│   ├── WebBootstrap.php
│   └── Webhooks
│       ├── CertPlatformWebhookController.php
│       ├── CertPracticeExamWebhookController.php
│       ├── ForgeWebhookController.php
│       ├── FreshdeskWebhookController.php
│       ├── HopinWebhookController.php
│       ├── MailchimpWebhookController.php
│       ├── MoneybirdWebhookController.php
│       ├── PostmarkWebhookController.php
│       ├── ProctorExamWebhookController.php
│       ├── QuadernoWebhookController.php
│       ├── StripeWebhookController.php
│       ├── TitoWebhookController.php
│       ├── TypeformWebhookController.php
│       ├── WebhookListingController.php
│       ├── webhook-listing.twig
│       ├── WebhooksReceiveController.php
│       └── WebhooksRoutes.php
├── Webhooks
│   ├── ReceiveWebhook.php
│   ├── WebhookId.php
│   ├── WebhookListingProjection.php
│   ├── WebhooksBootstrap.php
│   └── WebhookWasReceived.php
└── WebTokens
    ├── CanNotFindWebTokenById.php
    ├── EntityId.php
    ├── EntityType.php
    ├── GenerateWebToken.php
    ├── NewWebTokenWasGenerated.php
    ├── WebTokenBootstrap.php
    ├── WebTokenId.php
    ├── WebTokenListing.php
    ├── WebTokenListingProjection.php
    └── WebToken.php

120 directories, 932 files
Theme Selection: