├── src ├── EstimatorX.Service │ ├── wwwroot │ │ └── .keep │ ├── Controllers │ │ ├── ProjectController.cs │ │ ├── TemplateController.cs │ │ ├── OrganizationController.cs │ │ ├── UserController.cs │ │ ├── InviteController.cs │ │ └── LoggingController.cs │ ├── Properties │ │ └── launchSettings.json │ ├── Extensions │ │ └── HttpExtensions.cs │ ├── appsettings.json │ └── EstimatorX.Service.csproj ├── EstimatorX.Client │ ├── Components │ │ ├── AutoSave.razor │ │ ├── ConfirmModal.razor │ │ ├── Loading.razor │ │ ├── NotFound.razor │ │ ├── RedirectLogin.razor │ │ ├── AccessDenied.razor │ │ ├── Accordion.razor │ │ ├── ConfirmModal.razor.cs │ │ ├── AutoSave.razor.cs │ │ ├── ReorderModal.razor │ │ ├── ReorderModal.razor.cs │ │ └── Accordion.razor.cs │ ├── wwwroot │ │ ├── favicon.ico │ │ ├── mstile-70x70.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── mstile-144x144.png │ │ ├── mstile-150x150.png │ │ ├── mstile-310x150.png │ │ ├── mstile-310x310.png │ │ ├── apple-touch-icon.png │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── browserconfig.xml │ │ ├── appsettings.json │ │ ├── site.webmanifest │ │ └── images │ │ │ └── clock.svg │ ├── Pages │ │ ├── Projects │ │ │ ├── Details.razor.cs │ │ │ ├── Summary.razor.cs │ │ │ ├── General.razor.cs │ │ │ ├── Settings.razor.cs │ │ │ ├── Components │ │ │ │ ├── ProjectTabs.razor.cs │ │ │ │ ├── ProjectForm.razor.cs │ │ │ │ ├── EpicEditor.razor.cs │ │ │ │ ├── FeatureMoveModal.razor │ │ │ │ ├── ProjectSummary.razor.cs │ │ │ │ ├── EpicContainer.razor.cs │ │ │ │ ├── EpicContainer.razor │ │ │ │ ├── FeatureMoveModal.razor.cs │ │ │ │ ├── ProjectComponentBase.cs │ │ │ │ └── FeatureContainer.razor.cs │ │ │ ├── Summary.razor │ │ │ ├── Settings.razor │ │ │ ├── Details.razor │ │ │ ├── General.razor │ │ │ ├── Estimation.razor │ │ │ └── ProjectBase.cs │ │ ├── Templates │ │ │ ├── Estimation.razor.cs │ │ │ ├── General.razor.cs │ │ │ ├── Settings.razor.cs │ │ │ ├── Components │ │ │ │ ├── TemplateTabs.razor.cs │ │ │ │ └── TemplateTabs.razor │ │ │ ├── Estimation.razor │ │ │ ├── General.razor │ │ │ ├── Settings.razor │ │ │ └── Create.razor.cs │ │ ├── Organizations │ │ │ ├── Edit.razor.cs │ │ │ ├── Edit.razor │ │ │ ├── Components │ │ │ │ ├── OrganizationTabs.razor.cs │ │ │ │ ├── OrganizationForm.razor.cs │ │ │ │ ├── OrganizationTabs.razor │ │ │ │ ├── OrganizationForm.razor │ │ │ │ └── OrganizationInviteModal.razor.cs │ │ │ ├── Index.razor.cs │ │ │ └── OrganizationBase.cs │ │ ├── Authentication.razor │ │ └── Invite │ │ │ ├── Index.razor │ │ │ └── Index.razor.cs │ ├── Styles │ │ ├── _feature.css │ │ ├── _validation.scss │ │ ├── _fieldset.scss │ │ ├── _json-display.scss │ │ ├── _estimate.scss │ │ ├── _collapse.scss │ │ ├── _variables.scss │ │ ├── _accordion-type.scss │ │ ├── _table.scss │ │ └── main.scss │ ├── Shared │ │ ├── MainLayout.razor │ │ ├── Footer.razor │ │ └── MainLayout.razor.css │ ├── Stores │ │ ├── UserStore.cs │ │ ├── AccordionStore.cs │ │ ├── OrganizationStore.cs │ │ ├── ProjectStore.cs │ │ ├── TemplateStore.cs │ │ └── StoreBase.cs │ ├── Services │ │ ├── GatewayClient.cs │ │ └── NotificationService.cs │ ├── Repositories │ │ ├── UserRepository.cs │ │ ├── ProjectRepository.cs │ │ ├── TemplateRepository.cs │ │ ├── OrganizationRepository.cs │ │ ├── RepositorySearchBase.cs │ │ └── LoggingRepository.cs │ ├── _Imports.razor │ ├── Properties │ │ └── launchSettings.json │ ├── App.razor │ └── Extensions │ │ └── ModalExtensions.cs ├── EstimatorX.Shared │ ├── Models │ │ ├── Template.cs │ │ ├── Criticality.cs │ │ ├── StoryEstimate.cs │ │ ├── QueryResult.cs │ │ ├── ClarityScale.cs │ │ ├── ConfidenceScale.cs │ │ ├── EffortLevel.cs │ │ ├── RiskLevel.cs │ │ ├── LogEventResult.cs │ │ ├── UserSummary.cs │ │ ├── FeatureEstimate.cs │ │ ├── OrganizationMember.cs │ │ ├── IdentifierName.cs │ │ ├── EstimateMultiplier.cs │ │ ├── OrganizationSummary.cs │ │ ├── ProjectOverhead.cs │ │ ├── LogEventRequest.cs │ │ ├── QueryRequest.cs │ │ ├── TemplateSummary.cs │ │ ├── InviteSummary.cs │ │ ├── Invite.cs │ │ ├── Organization.cs │ │ ├── ModelBase.cs │ │ ├── UserProfile.cs │ │ ├── BrowserDetail.cs │ │ ├── ProjectSettings.cs │ │ ├── User.cs │ │ ├── ProjectSummary.cs │ │ ├── EpicEstimate.cs │ │ ├── Project.cs │ │ ├── EstimateBase.cs │ │ ├── LogEvent.cs │ │ ├── CosmosKey.cs │ │ └── JsonContext.cs │ ├── Definitions │ │ ├── IHaveName.cs │ │ ├── IHaveIdentifier.cs │ │ ├── ITrackCreated.cs │ │ ├── ITrackUpdated.cs │ │ ├── IHaveOrganization.cs │ │ └── IHaveEstimate.cs │ ├── Security │ │ └── Roles.cs │ ├── Validation │ │ ├── UserModelValidator.cs │ │ ├── OrganizationValidator.cs │ │ ├── EstimateMultiplierValidator.cs │ │ ├── EffortLevelValidator.cs │ │ ├── RiskLevelValidator.cs │ │ ├── InviteValidator.cs │ │ ├── ProjectOverheadValidator.cs │ │ ├── EpicEstimateValidator.cs │ │ ├── FeatureEstimateValidator.cs │ │ ├── ProjectValidator.cs │ │ ├── TemplateValidator.cs │ │ └── ProjectSettingsValidator.cs │ ├── Mapping │ │ ├── EpicEstimateProfile.cs │ │ ├── StoryEstimateProfile.cs │ │ ├── FeatureEstimateProfile.cs │ │ ├── OrganizationProfile.cs │ │ ├── InviteProfile.cs │ │ ├── ProjectProfile.cs │ │ ├── UserProfile.cs │ │ └── TemplateProfile.cs │ ├── Services │ │ ├── IProjectCalculator.cs │ │ └── IProjectBuilder.cs │ ├── Changes │ │ └── ChangeFeedConstants.cs │ ├── Extensions │ │ ├── ObjectExtensions.cs │ │ └── EnumerableExtensions.cs │ └── EstimatorX.Shared.csproj ├── EstimatorX.Core │ ├── Services │ │ ├── ISecurityKeyGenerator.cs │ │ ├── IProjectService.cs │ │ ├── ITemplateService.cs │ │ ├── IOrganizationService.cs │ │ ├── IUserService.cs │ │ ├── IUserCache.cs │ │ ├── SecurityKeyGenerator.cs │ │ ├── IInviteService.cs │ │ ├── IAdministrativeService.cs │ │ ├── ServiceRegistration.cs │ │ ├── IService.cs │ │ └── UserCache.cs │ ├── Changes │ │ └── ChangeFeedHub.cs │ ├── Options │ │ ├── LoggingOptions.cs │ │ ├── SendGridConfiguration.cs │ │ ├── HostingConfiguration.cs │ │ └── ConfigurationServiceModule.cs │ ├── Repositories │ │ ├── IInviteRepository.cs │ │ ├── IProjectRepository.cs │ │ ├── ITemplateRepository.cs │ │ ├── IOrganizationRepository.cs │ │ ├── IUserRepository.cs │ │ ├── OrganizationRepository.cs │ │ ├── TemplateRepository.cs │ │ ├── ProjectRepository.cs │ │ └── UserRepository.cs │ ├── Comparison │ │ ├── Delta.cs │ │ ├── Equality.cs │ │ ├── KeyEqualityComparer.cs │ │ └── DeltaCompare.cs │ ├── Query │ │ └── QueryOptions.cs │ ├── DomainException.cs │ └── EstimatorX.Core.csproj └── ILLink.Descriptors.xml ├── .github ├── FUNDING.yml ├── workflows │ └── merge.yml └── dependabot.yml ├── logo.png ├── design ├── Clock.png ├── html │ ├── package.json │ ├── main.css.map │ └── package-lock.json ├── Clock-50x50.png ├── Clock-1024x1024.png ├── favicon │ ├── favicon.ico │ ├── mstile-70x70.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── mstile-144x144.png │ ├── mstile-150x150.png │ ├── mstile-310x150.png │ ├── mstile-310x310.png │ ├── apple-touch-icon.png │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── browserconfig.xml │ ├── site.webmanifest │ ├── favicon.html │ └── README.md ├── logo.txt ├── images │ ├── ellipsis-v-solid.svg │ ├── crown-solid.svg │ └── trophy-solid.svg └── clock.svg ├── migration ├── Estimatorx.Data.Mongo │ ├── Providers │ │ ├── ILoggingRepository.cs │ │ ├── ITemplateRepository.cs │ │ ├── IProjectRepository.cs │ │ └── ISampleGenerator.cs │ ├── Security │ │ ├── Login.cs │ │ ├── IRoleRepository.cs │ │ ├── RoleNames.cs │ │ ├── IInviteRepository.cs │ │ ├── Role.cs │ │ ├── IOrganizationRepository.cs │ │ ├── IUserRepository.cs │ │ ├── Claim.cs │ │ ├── User.cs │ │ └── RoleRepository.cs │ ├── Estimatorx.Data.Mongo.csproj │ ├── Mapping │ │ ├── ClaimMap.cs │ │ ├── LoginMap.cs │ │ ├── RoleMap.cs │ │ ├── LogErrorMap.cs │ │ ├── FactorMap.cs │ │ ├── SectionMap.cs │ │ ├── InviteMap.cs │ │ ├── TaskMap.cs │ │ └── LogEventMap.cs │ ├── LogError.cs │ ├── LogEvent.cs │ └── LoggingRepository.cs └── Estimatorx.Migration │ ├── appsettings.json │ ├── Estimatorx.Migration.csproj │ └── Program.cs ├── test ├── EstimatorX.Shared.Tests │ ├── Services │ │ ├── ProjectBuilderTests.cs │ │ └── ProjectCalculatorTests.cs │ └── EstimatorX.Shared.Tests.csproj └── EstimatorX.Core.Tests │ └── EstimatorX.Core.Tests.csproj ├── .editorconfig └── LICENSE /src/EstimatorX.Service/wwwroot/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: loresoft 2 | -------------------------------------------------------------------------------- /src/EstimatorX.Client/Components/AutoSave.razor: -------------------------------------------------------------------------------- 1 | @ChildContent 2 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/logo.png -------------------------------------------------------------------------------- /design/Clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/Clock.png -------------------------------------------------------------------------------- /design/html/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "bootstrap": "^5.1.3" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /design/Clock-50x50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/Clock-50x50.png -------------------------------------------------------------------------------- /design/Clock-1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/Clock-1024x1024.png -------------------------------------------------------------------------------- /design/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/favicon.ico -------------------------------------------------------------------------------- /design/logo.txt: -------------------------------------------------------------------------------- 1 | Logo 2 | 3 | http://www.squarespace.com/logo 4 | 5 | Fill Color: #337AB7 6 | Font: Nunito -------------------------------------------------------------------------------- /design/favicon/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/mstile-70x70.png -------------------------------------------------------------------------------- /design/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /design/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /design/favicon/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/mstile-144x144.png -------------------------------------------------------------------------------- /design/favicon/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/mstile-150x150.png -------------------------------------------------------------------------------- /design/favicon/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/mstile-310x150.png -------------------------------------------------------------------------------- /design/favicon/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/mstile-310x310.png -------------------------------------------------------------------------------- /design/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /design/favicon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/android-chrome-192x192.png -------------------------------------------------------------------------------- /design/favicon/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/design/favicon/android-chrome-512x512.png -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/favicon.ico -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/mstile-70x70.png -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/favicon-16x16.png -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/favicon-32x32.png -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/mstile-144x144.png -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/mstile-150x150.png -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/mstile-310x150.png -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/mstile-310x310.png -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/apple-touch-icon.png -------------------------------------------------------------------------------- /src/EstimatorX.Shared/Models/Template.cs: -------------------------------------------------------------------------------- 1 | namespace EstimatorX.Shared.Models; 2 | 3 | [Equatable] 4 | public partial class Template : Project 5 | { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/android-chrome-192x192.png -------------------------------------------------------------------------------- /src/EstimatorX.Client/wwwroot/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/loresoft/Estimatorx/HEAD/src/EstimatorX.Client/wwwroot/android-chrome-512x512.png -------------------------------------------------------------------------------- /src/EstimatorX.Shared/Definitions/IHaveName.cs: -------------------------------------------------------------------------------- 1 | namespace EstimatorX.Shared.Definitions; 2 | 3 | public interface IHaveName 4 | { 5 | string Name { get; set; } 6 | } 7 | -------------------------------------------------------------------------------- /src/EstimatorX.Shared/Models/Criticality.cs: -------------------------------------------------------------------------------- 1 | namespace EstimatorX.Shared.Models; 2 | 3 | public enum Criticality 4 | { 5 | Required = 0, 6 | Stretch = 1 7 | } 8 | -------------------------------------------------------------------------------- /src/EstimatorX.Core/Services/ISecurityKeyGenerator.cs: -------------------------------------------------------------------------------- 1 | namespace EstimatorX.Core.Services; 2 | 3 | public interface ISecurityKeyGenerator 4 | { 5 | string GenerateKey(); 6 | } -------------------------------------------------------------------------------- /src/EstimatorX.Shared/Models/StoryEstimate.cs: -------------------------------------------------------------------------------- 1 | namespace EstimatorX.Shared.Models; 2 | 3 | [Equatable] 4 | public partial class StoryEstimate : EstimateBase 5 | { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/EstimatorX.Core/Changes/ChangeFeedHub.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.SignalR; 2 | 3 | namespace EstimatorX.Core.Changes; 4 | 5 | public class ChangeFeedHub : Hub 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /src/EstimatorX.Shared/Definitions/IHaveIdentifier.cs: -------------------------------------------------------------------------------- 1 | namespace EstimatorX.Shared.Definitions; 2 | 3 | public interface IHaveIdentifier 4 | { 5 | string Id { get; set; } 6 | } 7 | -------------------------------------------------------------------------------- /src/EstimatorX.Shared/Security/Roles.cs: -------------------------------------------------------------------------------- 1 | namespace EstimatorX.Shared.Security; 2 | 3 | public static class Roles 4 | { 5 | public const string Administrators = "Administrators"; 6 | } 7 | -------------------------------------------------------------------------------- /src/EstimatorX.Core/Services/IProjectService.cs: -------------------------------------------------------------------------------- 1 | using EstimatorX.Shared.Models; 2 | 3 | namespace EstimatorX.Core.Services; 4 | 5 | public interface IProjectService : IService 6 | { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /src/EstimatorX.Core/Services/ITemplateService.cs: -------------------------------------------------------------------------------- 1 | using EstimatorX.Shared.Models; 2 | 3 | namespace EstimatorX.Core.Services; 4 | 5 | public interface ITemplateService : IService