diff --git a/PlotLine/Controllers/PublicController.cs b/PlotLine/Controllers/PublicController.cs new file mode 100644 index 0000000..12fd283 --- /dev/null +++ b/PlotLine/Controllers/PublicController.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using PlotLine.ViewModels; + +namespace PlotLine.Controllers; + +[AllowAnonymous] +[Route("")] +public sealed class PublicController : Controller +{ + private const string SupportEmail = "hello@plotweaver.studio"; + private const string PolicyDate = "June 7, 2026"; + + [HttpGet("About")] + public IActionResult About() => View(CreateModel()); + + [HttpGet("Contact")] + public IActionResult Contact() => View(CreateModel()); + + [HttpGet("Privacy")] + public IActionResult Privacy() => View(CreateModel()); + + [HttpGet("Terms")] + public IActionResult Terms() => View(CreateModel()); + + private static PublicPageViewModel CreateModel() => new() + { + SupportEmail = SupportEmail, + LastUpdated = PolicyDate + }; +} diff --git a/PlotLine/ViewModels/AuthViewModels.cs b/PlotLine/ViewModels/AuthViewModels.cs index cd9cba3..4b77fb2 100644 --- a/PlotLine/ViewModels/AuthViewModels.cs +++ b/PlotLine/ViewModels/AuthViewModels.cs @@ -24,6 +24,12 @@ public sealed class PricingViewModel public bool IsSignedIn { get; set; } } +public sealed class PublicPageViewModel +{ + public string SupportEmail { get; set; } = "support@plotweaver.studio"; + public string LastUpdated { get; set; } = "June 7, 2026"; +} + public sealed class RegisterViewModel { [Required(ErrorMessage = "Enter your email address.")] diff --git a/PlotLine/Views/Home/Index.cshtml b/PlotLine/Views/Home/Index.cshtml index f16b246..82b9ca3 100644 --- a/PlotLine/Views/Home/Index.cshtml +++ b/PlotLine/Views/Home/Index.cshtml @@ -231,7 +231,7 @@
"It feels like someone finally designed a planning tool for the way my fantasy series actually works."
-
R. H., epic fantasy author
+
Catherine Lynwood, women's fiction author
"I stopped losing clues in old documents. The whole mystery is visible now, including the red herrings."
diff --git a/PlotLine/Views/Public/About.cshtml b/PlotLine/Views/Public/About.cshtml new file mode 100644 index 0000000..31148e3 --- /dev/null +++ b/PlotLine/Views/Public/About.cshtml @@ -0,0 +1,33 @@ +@model PublicPageViewModel +@{ + ViewData["Title"] = "About"; + ViewData["ShellClass"] = "marketing-shell"; +} + +
+
+
+

About PlotWeaver Studio

+

Built by a novelist. Designed for writers.

+

PlotWeaver Studio was created to help authors organise complex stories and write with confidence.

+
+
+ +
+
+

PlotWeaver Studio was born from a simple frustration.

+

While writing novels, I found myself constantly switching between Word documents, spreadsheets, notebooks, sticky notes, and countless pages of notes just to keep track of characters, plot threads, timelines, and important story details.

+

Existing tools either felt too simplistic for complex stories or too complicated to fit naturally into a writer's process.

+

PlotWeaver Studio was created to be the tool I wished I had: a place where characters, locations, relationships, plot lines, assets, scenes, and story structure could all work together.

+

Whether you're writing your first novel or managing an entire series, PlotWeaver Studio is designed to help you stay organised, maintain continuity, and focus on what matters most:

+

telling great stories.

+
+
+ +
+
+

Our Mission

+

To help writers feel confident, organised, and empowered to finish the stories they want to tell.

+
+
+
diff --git a/PlotLine/Views/Public/Contact.cshtml b/PlotLine/Views/Public/Contact.cshtml new file mode 100644 index 0000000..68e7da8 --- /dev/null +++ b/PlotLine/Views/Public/Contact.cshtml @@ -0,0 +1,52 @@ +@model PublicPageViewModel +@{ + ViewData["Title"] = "Contact"; + ViewData["ShellClass"] = "marketing-shell"; +} + +
+
+
+

Contact

+

Get in touch

+

We'd love to hear from you.

+ @Model.SupportEmail +
+
+ +
+
+
+

General enquiries

+

For questions about PlotWeaver Studio, subscriptions, or whether it is right for your writing process, email @Model.SupportEmail.

+
+
+

Support

+

If you're experiencing a problem, please include as much detail as possible, including screenshots if appropriate.

+
+
+

Feedback and suggestions

+

For feature suggestions, we'd love to hear how PlotWeaver Studio could better support your writing process.

+
+
+
+ +
+
+
+

Contact FAQ

+

Useful to know

+
+
+
+

How quickly will I receive a response?

+

We aim to respond to enquiries as quickly as possible.

+
+
+

Can I suggest new features?

+

Absolutely. PlotWeaver Studio continues to evolve based on feedback from writers.

+
+
+
+
+
diff --git a/PlotLine/Views/Public/Privacy.cshtml b/PlotLine/Views/Public/Privacy.cshtml new file mode 100644 index 0000000..28ff477 --- /dev/null +++ b/PlotLine/Views/Public/Privacy.cshtml @@ -0,0 +1,96 @@ +@model PublicPageViewModel +@{ + ViewData["Title"] = "Privacy Policy"; + ViewData["ShellClass"] = "marketing-shell"; +} + +
+
+
+

Privacy

+

Privacy Policy

+

Your stories remain yours.

+

Last updated: @Model.LastUpdated

+
+
+ +
+
+
+

Introduction

+

PlotWeaver Studio respects your privacy and is committed to protecting your personal information.

+
+ +
+

Information We Collect

+

We collect only the information necessary to provide the service, including:

+
    +
  • Email address
  • +
  • Account authentication information
  • +
  • Subscription and billing status information
  • +
  • Content that you choose to create and store within PlotWeaver Studio
  • +
  • Basic technical information required to operate and secure the service, such as IP addresses and login activity
  • +
+

We do not collect phone numbers, postal addresses, or unnecessary personal information.

+
+ +
+

How We Use Information

+

We use your information to:

+
    +
  • Provide and maintain the PlotWeaver Studio service
  • +
  • Authenticate users and secure accounts
  • +
  • Process subscriptions and payments
  • +
  • Communicate important service information
  • +
  • Improve and support the platform
  • +
+
+ +
+

User Content Ownership

+

You retain ownership of all stories, manuscripts, characters, notes, and other content you create within PlotWeaver Studio.

+

PlotWeaver Studio does not claim ownership of your content.

+
+ +
+

Payments

+

Payments are processed securely by Stripe.

+

PlotWeaver Studio does not store full payment card details.

+
+ +
+

Cookies and Local Storage

+

PlotWeaver Studio uses essential authentication cookies required for users to securely access their accounts.

+

The application may also use browser local storage to remember interface preferences and improve the user experience.

+

These technologies are used solely to provide core functionality.

+
+ +
+

Data Sharing

+

We do not sell personal information.

+

Information may be shared only with trusted service providers necessary to operate the service, such as payment processors.

+
+ +
+

Data Retention

+

Information is retained only for as long as necessary to provide the service and comply with legal obligations.

+
+ +
+

Your Rights

+

Depending on your jurisdiction, you may have rights relating to access, correction, deletion, and portability of your personal information.

+

To exercise these rights, please contact us.

+
+ +
+

Contact

+

For privacy-related enquiries, please contact:

+

@Model.SupportEmail

+
+ +@* *@ +
+
+
diff --git a/PlotLine/Views/Public/Terms.cshtml b/PlotLine/Views/Public/Terms.cshtml new file mode 100644 index 0000000..cb21ba1 --- /dev/null +++ b/PlotLine/Views/Public/Terms.cshtml @@ -0,0 +1,87 @@ +@model PublicPageViewModel +@{ + ViewData["Title"] = "Terms of Service"; + ViewData["ShellClass"] = "marketing-shell"; +} + +
+
+
+

Terms

+

Terms of Service

+

Please read these terms carefully before using PlotWeaver Studio.

+

Last updated: @Model.LastUpdated

+
+
+ +
+
+
+

Acceptance of Terms

+

By accessing or using PlotWeaver Studio, you agree to these Terms of Service.

+
+ +
+

Use of the Service

+

You agree to use PlotWeaver Studio lawfully and responsibly.

+

You must not:

+
    +
  • Attempt unauthorised access to the service
  • +
  • Interfere with the operation or security of the platform
  • +
  • Use the service for unlawful purposes
  • +
  • Attempt to reverse engineer or exploit the service
  • +
+
+ +
+

User Content

+

You retain ownership of all content you create within PlotWeaver Studio.

+

You are responsible for the legality and appropriateness of the content you store.

+
+ +
+

Subscriptions and Billing

+

Paid subscriptions renew according to the billing period selected during purchase.

+

You may cancel your subscription in accordance with the subscription management options provided.

+
+ +
+

Cancellation and Account Access

+

If a subscription ends, access to certain paid features may be restricted.

+
+ +
+

Limitation of Liability

+

PlotWeaver Studio is provided on an "as available" and "as is" basis.

+

While reasonable efforts are made to maintain availability and reliability, uninterrupted access cannot be guaranteed.

+

To the maximum extent permitted by law, PlotWeaver Studio shall not be liable for indirect, incidental, or consequential damages arising from the use of the service.

+
+ +
+

Backups

+

While reasonable measures may be taken to protect data, users are encouraged to maintain their own backups of important work.

+
+ +
+

Changes to the Service

+

PlotWeaver Studio may update or modify features and services over time.

+
+ +
+

Changes to Terms

+

These Terms of Service may be updated periodically.

+

Continued use of the service constitutes acceptance of any updated terms.

+
+ +
+

Contact

+

Questions regarding these Terms of Service may be directed to:

+

@Model.SupportEmail

+
+ +@* *@ +
+
+
diff --git a/PlotLine/Views/Shared/_Layout.cshtml b/PlotLine/Views/Shared/_Layout.cshtml index a6c301a..7bc7654 100644 --- a/PlotLine/Views/Shared/_Layout.cshtml +++ b/PlotLine/Views/Shared/_Layout.cshtml @@ -120,6 +120,21 @@
+ @if ((ViewData["ShellClass"] as string)?.Contains("marketing-shell", StringComparison.OrdinalIgnoreCase) == true) + { + + }