From b6837de9f4bf1ed3e59902310d474530b1a07239 Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 17 Dec 2025 17:45:37 -0600 Subject: [PATCH] feat: initial project branding and setup --- CLAUDE.md | 95 +++++++++++++++++++ .../EnvironmentInfo/BuildInfo.cs | 2 +- src/NzbDrone.Core/Localization/Core/en.json | 18 ++-- 3 files changed, 105 insertions(+), 10 deletions(-) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..04460acb80 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,95 @@ +# Logarr Development + +All-in-one media manager (movies, books, audiobooks). Forked from Radarr. +Greek: λόγος (logos) = "word, reason" + + + +CRITICAL: Zero AI indicators in code, commits, docs pushed to GitHub +CRITICAL: Keep Radarr movie functionality working at all times +CRITICAL: Hierarchical monitoring is foundational - design it in, don't bolt on +REQUIRED: Follow global CLAUDE.md coding standards +REQUIRED: Use sub-agents for exploration and research + + + +## Project Info + +| Item | Value | +|------|-------| +| Fork | github.com/Cody-k/logarr | +| Upstream | github.com/Radarr/Radarr | +| Stack | C# .NET 6.0, React, TypeScript | +| Goal | Unified media manager for movies, books, audiobooks | + +## Quick Commands + +```bash +# Build +./build.sh --backend --frontend + +# Run locally +dotnet run --project src/Radarr + +# Frontend dev +cd frontend && yarn install && yarn start + +# Docker +docker build -t logarr . +``` + +## Architecture Goals + +### Phase 1: Foundation +- Generalize database schema (Movies → MediaItems) +- Add MediaType discriminator +- Implement hierarchical monitoring (Author → Series → Item) + +### Phase 2: Multi-Media +- Add book qualities (EPUB, MOBI, PDF) +- Add audiobook qualities (M4B, MP3) +- Port metadata providers from Akouarr/Bookshelf + +### Phase 3: UI +- Unified dashboard with type filters +- Type-specific detail views +- Shared components with media badges + +## Key Files + +``` +src/ +├── NzbDrone.Common/EnvironmentInfo/BuildInfo.cs # App name +├── NzbDrone.Core/ +│ ├── Movies/ # → MediaItems +│ ├── Qualities/ # Quality definitions +│ └── Localization/Core/en.json # UI strings +├── Radarr.Api.V3/ # REST API +└── frontend/src/ # React UI +``` + +## Migration Notes + +### From Akouarr +Features to port: +- Narrator field on editions +- Duration tracking +- Audiobook qualities (MP3, M4B, FLAC) +- Batch query patterns +- Analytics dashboard +- MyAnonaMouse indexer + +### From Radarr +Keep intact: +- Movie tracking and monitoring +- TMDB metadata integration +- Quality profile system +- Download client integration +- Indexer framework + +## Development Standards + +- Match existing codebase patterns +- No placeholder code +- Test changes before committing +- Keep Radarr compatibility during development diff --git a/src/NzbDrone.Common/EnvironmentInfo/BuildInfo.cs b/src/NzbDrone.Common/EnvironmentInfo/BuildInfo.cs index 61a56f17d5..edd6e79e11 100644 --- a/src/NzbDrone.Common/EnvironmentInfo/BuildInfo.cs +++ b/src/NzbDrone.Common/EnvironmentInfo/BuildInfo.cs @@ -26,7 +26,7 @@ static BuildInfo() Release = $"{Version}-{Branch}"; } - public static string AppName { get; } = "Radarr"; + public static string AppName { get; } = "Logarr"; public static Version Version { get; } public static string Branch { get; } diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 23a3b71ab8..3605afba4a 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -798,12 +798,12 @@ "ImportListStatusCheckSingleClientMessage": "Lists unavailable due to failures: {importListNames}", "ImportLists": "Import Lists", "ImportListsLoadError": "Unable to load Import Lists", - "ImportListsRadarrSettingsApiKeyHelpText": "API Key of the {appName} instance to import from (Radarr 3.0 or higher)", - "ImportListsRadarrSettingsFullUrl": "Full URL", - "ImportListsRadarrSettingsFullUrlHelpText": "URL, including port, of the {appName} instance to import from (Radarr 3.0 or higher)", - "ImportListsRadarrSettingsQualityProfilesHelpText": "Quality Profiles from the source instance to import from", - "ImportListsRadarrSettingsRootFoldersHelpText": "Root Folders from the source instance to import from", - "ImportListsRadarrSettingsTagsHelpText": "Tags from the source instance to import from", + "ImportListsLogarrSettingsApiKeyHelpText": "API Key of the {appName} instance to import from (Logarr 3.0 or higher)", + "ImportListsLogarrSettingsFullUrl": "Full URL", + "ImportListsLogarrSettingsFullUrlHelpText": "URL, including port, of the {appName} instance to import from (Logarr 3.0 or higher)", + "ImportListsLogarrSettingsQualityProfilesHelpText": "Quality Profiles from the source instance to import from", + "ImportListsLogarrSettingsRootFoldersHelpText": "Root Folders from the source instance to import from", + "ImportListsLogarrSettingsTagsHelpText": "Tags from the source instance to import from", "ImportListsSettingsSummary": "Import from another {appName} instance or Trakt lists and manage list exclusions", "ImportListsTraktSettingsAdditionalParameters": "Additional Parameters", "ImportListsTraktSettingsAdditionalParametersHelpText": "Additional Trakt API parameters", @@ -859,7 +859,7 @@ "IncludeHealthWarnings": "Include Health Warnings", "IncludePopular": "Include Popular", "IncludePopularMoviesHelpText": "Include popular movies on TMDb", - "IncludeRadarrRecommendations": "Include {appName} Recommendations", + "IncludeLogarrRecommendations": "Include {appName} Recommendations", "IncludeRecommendationsHelpText": "Include {appName} recommended movies in discovery view", "IncludeTrending": "Include Trending", "IncludeTrendingMoviesHelpText": "Include trending movies on TMDb", @@ -1547,7 +1547,7 @@ "QueueLoadError": "Failed to load Queue", "Queued": "Queued", "QuickImport": "Move Automatically", - "RadarrTags": "{appName} Tags", + "LogarrTags": "{appName} Tags", "Rating": "Rating", "Ratings": "Ratings", "ReadTheWikiForMoreInformation": "Read the Wiki for more information", @@ -1686,7 +1686,7 @@ "Restart": "Restart", "RestartLater": "I'll restart later", "RestartNow": "Restart Now", - "RestartRadarr": "Restart {appName}", + "RestartLogarr": "Restart {appName}", "RestartReloadNote": "Note: {appName} will automatically restart and reload the UI during the restore process.", "RestartRequiredHelpTextWarning": "Requires restart to take effect", "RestartRequiredToApplyChanges": "{appName} requires a restart to apply changes, do you want to restart now?",