Added Reckoning Index pages
This commit is contained in:
parent
fb4e139d9f
commit
85924f63d3
@ -153,19 +153,19 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Humanizer.Core" Version="2.14.1" />
|
||||
<PackageReference Include="MailKit" Version="4.14.1" />
|
||||
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.3" />
|
||||
<PackageReference Include="Humanizer.Core" Version="3.0.10" />
|
||||
<PackageReference Include="MailKit" Version="4.15.1" />
|
||||
<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Web.Administration" Version="11.1.0" />
|
||||
<PackageReference Include="NAudio" Version="2.2.1" />
|
||||
<PackageReference Include="NAudio" Version="2.3.0" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||
<PackageReference Include="SixLabors.Fonts" Version="2.1.3" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.12" />
|
||||
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.7" />
|
||||
<PackageReference Include="SixLabors.ImageSharp.Web" Version="3.2.0" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="10.0.0" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="10.0.5" />
|
||||
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
||||
<PackageReference Include="WebMarkupMin.AspNetCoreLatest" Version="2.20.0" />
|
||||
<PackageReference Include="WebMarkupMin.AspNetCoreLatest" Version="2.21.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -3,25 +3,39 @@ using CatherineLynwood.Services;
|
||||
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace CatherineLynwood.Components
|
||||
{
|
||||
public class BuyPanel : ViewComponent
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private DataAccess _dataAccess;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
public BuyPanel(DataAccess dataAccess)
|
||||
{
|
||||
_dataAccess = dataAccess;
|
||||
}
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public async Task<IViewComponentResult> InvokeAsync(string iso2, string src, string title)
|
||||
{
|
||||
BuyPanelViewModel buyPanelViewModel = await _dataAccess.GetBuyPanelViewModel(iso2, title);
|
||||
buyPanelViewModel.Src = src;
|
||||
|
||||
if (title == "Reckoning")
|
||||
{
|
||||
return View("Reckoning", buyPanelViewModel);
|
||||
}
|
||||
return View(buyPanelViewModel);
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
}
|
||||
}
|
||||
@ -2,11 +2,85 @@
|
||||
|
||||
namespace CatherineLynwood.Controllers
|
||||
{
|
||||
[Route("indie-author")]
|
||||
public class IndieAuthorController : Controller
|
||||
{
|
||||
[HttpGet("")]
|
||||
public IActionResult Index()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("isbns")]
|
||||
public IActionResult Isbns()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("kdp")]
|
||||
public IActionResult Kdp()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("audiobooks")]
|
||||
public IActionResult Audiobooks()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("ingramspark")]
|
||||
public IActionResult IngramSpark()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("kdp-vs-ingramspark")]
|
||||
public IActionResult KdpVsIngramSpark()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("editing-and-proofreading")]
|
||||
public IActionResult EditingAndProofreading()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("amazon-advertising")]
|
||||
public IActionResult AmazonAdvertising()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("reviews-and-arc-readers")]
|
||||
public IActionResult ReviewsAndArcReaders()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("cover-design")]
|
||||
public IActionResult CoverDesign()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("ai-for-authors")]
|
||||
public IActionResult AiForAuthors()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("traditional-vs-self-publishing")]
|
||||
public IActionResult TraditionalVsSelfPublishing()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet("author-finances")]
|
||||
public IActionResult AuthorFinances()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,6 +30,15 @@ namespace CatherineLynwood.Controllers
|
||||
[Route("")]
|
||||
public async Task<IActionResult> Index()
|
||||
{
|
||||
// Prevent caches or CDNs from cross-serving variants
|
||||
Response.Headers["Vary"] = "Cookie, User-Agent";
|
||||
|
||||
// Decide device class first
|
||||
var device = ResolveDeviceClass();
|
||||
|
||||
// Decide variant
|
||||
var variant = ResolveVariant(device);
|
||||
|
||||
// Country ISO2
|
||||
var iso2 = (_country.Iso2 ?? "GB").ToUpperInvariant();
|
||||
if (iso2 == "UK") iso2 = "GB";
|
||||
@ -38,16 +47,34 @@ namespace CatherineLynwood.Controllers
|
||||
Reviews reviews = await _dataAccess.GetReviewsAsync("Reckoning");
|
||||
reviews.SchemaJsonLd = GenerateBookSchemaJsonLd(reviews, 3);
|
||||
|
||||
string src = variant switch
|
||||
{
|
||||
Variant.A => "Mobile",
|
||||
Variant.B => "Mobile",
|
||||
_ => "Desktop"
|
||||
};
|
||||
|
||||
|
||||
// VM
|
||||
var vm = new TitlePageViewModel
|
||||
{
|
||||
Reviews = reviews,
|
||||
UserIso2 = iso2,
|
||||
Src = "Index",
|
||||
Src = src,
|
||||
Title = "Reckoning"
|
||||
};
|
||||
|
||||
return View("Index", vm);
|
||||
// View mapping:
|
||||
// - A and B are the two MOBILE variants
|
||||
// - C is the DESKTOP variant
|
||||
string viewName = variant switch
|
||||
{
|
||||
Variant.A => "IndexMobile", // mobile layout A
|
||||
Variant.B => "IndexMobile", // mobile layout B
|
||||
_ => "Index" // desktop layout C
|
||||
};
|
||||
|
||||
return View(viewName, vm);
|
||||
}
|
||||
|
||||
[Route("reviews")]
|
||||
@ -87,27 +114,27 @@ namespace CatherineLynwood.Controllers
|
||||
return View(flagSupportViewModel);
|
||||
}
|
||||
|
||||
[BookAccess(1, 1)]
|
||||
[BookAccess(1, 2)]
|
||||
[Route("extras")]
|
||||
public IActionResult Extras() => View();
|
||||
|
||||
[BookAccess(1, 1)]
|
||||
[BookAccess(1, 2)]
|
||||
[Route("extras/epilogue")]
|
||||
public IActionResult Epilogue() => View();
|
||||
|
||||
[BookAccess(1, 1)]
|
||||
[BookAccess(1, 2)]
|
||||
[Route("extras/scrap-book")]
|
||||
public IActionResult ScrapBook() => View();
|
||||
|
||||
[BookAccess(1, 1)]
|
||||
[BookAccess(1, 2)]
|
||||
[Route("extras/listen")]
|
||||
public IActionResult Listen() => View();
|
||||
|
||||
[BookAccess(1, 1)]
|
||||
[BookAccess(1, 2)]
|
||||
[Route("extras/maggies-designs")]
|
||||
public IActionResult MaggiesDesigns() => View();
|
||||
|
||||
[BookAccess(1, 1)]
|
||||
[BookAccess(1, 2)]
|
||||
[Route("extras/soundtrack")]
|
||||
public async Task<IActionResult> Soundtrack()
|
||||
{
|
||||
|
||||
@ -56,6 +56,19 @@ namespace CatherineLynwood.Controllers
|
||||
new SitemapEntry { Url = Url.Action("SamanthaLynwood", "Home", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("VerosticGenre", "Home", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("LarhysaSaddul", "Collaborations", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("Index", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("Isbn", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("Kdp", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("Audiobooks", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("IngramSpark", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("KdpVsIngramSpark", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("EditingAndProofreading", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("AmazonAdvertising", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("ReviewsAndArcReaders", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("TraditionalVsSelfPublishing", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("AuthorFinances", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("CoverDesign", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
new SitemapEntry { Url = Url.Action("AiForAuthors", "IndieAuthor", null, Request.Scheme).TrimEnd('/'), LastModified = DateTime.UtcNow },
|
||||
// Additional static pages
|
||||
};
|
||||
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
using CatherineLynwood.Helpers;
|
||||
using CatherineLynwood.Models;
|
||||
using CatherineLynwood.Models;
|
||||
using CatherineLynwood.Services;
|
||||
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Identity.Client;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
@ -157,6 +155,30 @@ namespace CatherineLynwood.Controllers
|
||||
return RedirectToAction("BlogItem", new { slug = blogUrl, showThanks = showThanks });
|
||||
}
|
||||
|
||||
[BookAccess(1)]
|
||||
[Route("extras")]
|
||||
public IActionResult Extras()
|
||||
{
|
||||
var session = HttpContext.Session;
|
||||
|
||||
var level = session.GetInt32("BookAccessLevel");
|
||||
var book = session.GetInt32("BookAccessMax");
|
||||
|
||||
if (book == 2)
|
||||
{
|
||||
return RedirectToAction("Extras", "Reckoning");
|
||||
}
|
||||
|
||||
if (book == 3)
|
||||
{
|
||||
return RedirectToAction("Extras", "Redemption");
|
||||
}
|
||||
|
||||
|
||||
return RedirectToAction("Extras", "Discovery");
|
||||
|
||||
}
|
||||
|
||||
[Route("")]
|
||||
public IActionResult Index()
|
||||
{
|
||||
|
||||
@ -6,7 +6,7 @@ public class BookAccessAttribute : Attribute, IAsyncAuthorizationFilter
|
||||
private readonly int _requiredLevel;
|
||||
private readonly int _requiredBook;
|
||||
|
||||
public BookAccessAttribute(int requiredLevel, int requiredBook)
|
||||
public BookAccessAttribute(int requiredLevel, int requiredBook = 0)
|
||||
{
|
||||
_requiredLevel = requiredLevel;
|
||||
_requiredBook = requiredBook;
|
||||
@ -19,13 +19,28 @@ public class BookAccessAttribute : Attribute, IAsyncAuthorizationFilter
|
||||
var level = session.GetInt32("BookAccessLevel");
|
||||
var book = session.GetInt32("BookAccessMax");
|
||||
|
||||
if (level == null || book == null || level < _requiredLevel || book < _requiredBook)
|
||||
if (_requiredBook == 0)
|
||||
{
|
||||
var currentUrl = context.HttpContext.Request.Path + context.HttpContext.Request.QueryString;
|
||||
context.HttpContext.Items["RequestedUrl"] = currentUrl; // store temporarily
|
||||
if (level == null || book == null || level < _requiredLevel)
|
||||
{
|
||||
var currentUrl = context.HttpContext.Request.Path + context.HttpContext.Request.QueryString;
|
||||
context.HttpContext.Items["RequestedUrl"] = currentUrl; // store temporarily
|
||||
|
||||
context.Result = new RedirectToActionResult("Prompt", "Access", new { returnUrl = currentUrl });
|
||||
context.Result = new RedirectToActionResult("Prompt", "Access", new { returnUrl = currentUrl });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (level == null || book == null || level < _requiredLevel || book != _requiredBook)
|
||||
{
|
||||
var currentUrl = context.HttpContext.Request.Path + context.HttpContext.Request.QueryString;
|
||||
context.HttpContext.Items["RequestedUrl"] = currentUrl; // store temporarily
|
||||
|
||||
context.Result = new RedirectToActionResult("Prompt", "Access", new { returnUrl = currentUrl });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
@ -2,10 +2,21 @@
|
||||
{
|
||||
public class AccessCode
|
||||
{
|
||||
public int PageNumber { get; set; }
|
||||
public int WordIndex { get; set; }
|
||||
#region Public Properties
|
||||
|
||||
public int AccessLevel { get; set; }
|
||||
|
||||
// 1 = basic, 2 = retail, 3 = deluxe
|
||||
public int BookID { get; set; }
|
||||
|
||||
public string ExpectedWord { get; set; }
|
||||
public int AccessLevel { get; set; } // 1 = basic, 2 = retail, 3 = deluxe
|
||||
public int BookNumber { get; set; } // 1, 2, or 3
|
||||
|
||||
public int PageNumber { get; set; }
|
||||
|
||||
public int WordIndex { get; set; }
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
// 1, 2, or 3
|
||||
}
|
||||
}
|
||||
@ -1,27 +1,37 @@
|
||||
using CatherineLynwood.Models;
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CatherineLynwood.Services
|
||||
{
|
||||
public interface IAccessCodeService
|
||||
{
|
||||
Task<(int pageNumber, int wordIndex)> GetCurrentChallengeAsync();
|
||||
Task<(int accessLevel, int highestBook)> ValidateWordAsync(string userWord);
|
||||
}
|
||||
#region Public Methods
|
||||
|
||||
Task<(int pageNumber, int wordIndex)> GetCurrentChallengeAsync();
|
||||
|
||||
Task<(int accessLevel, int highestBook)> ValidateWordAsync(string userWord);
|
||||
|
||||
#endregion Public Methods
|
||||
}
|
||||
|
||||
public class AccessCodeService : IAccessCodeService
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private readonly List<AccessCode> _accessCodes;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
public AccessCodeService(DataAccess dataAccess)
|
||||
{
|
||||
_accessCodes = dataAccess.GetAccessCodes();
|
||||
}
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public Task<(int pageNumber, int wordIndex)> GetCurrentChallengeAsync()
|
||||
{
|
||||
var challenge = _accessCodes.First(); // current prompt
|
||||
@ -34,10 +44,11 @@ namespace CatherineLynwood.Services
|
||||
c.ExpectedWord.Equals(userWord, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (match != null)
|
||||
return Task.FromResult((match.AccessLevel, match.BookNumber));
|
||||
return Task.FromResult((match.AccessLevel, match.BookID));
|
||||
|
||||
return Task.FromResult((0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
}
|
||||
}
|
||||
@ -3,11 +3,6 @@
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using Microsoft.Data.SqlClient;
|
||||
|
||||
using SixLabors.ImageSharp.Web.Commands.Converters;
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
|
||||
namespace CatherineLynwood.Services
|
||||
@ -27,76 +22,6 @@ namespace CatherineLynwood.Services
|
||||
_connectionString = connectionString;
|
||||
}
|
||||
|
||||
public async Task<BuyPanelViewModel> GetBuyPanelViewModel(string iso2, string title)
|
||||
{
|
||||
BuyPanelViewModel buyPanelViewModel = new BuyPanelViewModel();
|
||||
|
||||
using (SqlConnection conn = new SqlConnection(_connectionString))
|
||||
{
|
||||
using (SqlCommand cmd = new SqlCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
cmd.Connection = conn;
|
||||
cmd.CommandType = CommandType.StoredProcedure;
|
||||
cmd.CommandText = "GetBuyLinks";
|
||||
cmd.Parameters.AddWithValue("@ISO2", iso2);
|
||||
cmd.Parameters.AddWithValue("@Title", title);
|
||||
|
||||
using (SqlDataReader rdr = await cmd.ExecuteReaderAsync())
|
||||
{
|
||||
while (await rdr.ReadAsync())
|
||||
{
|
||||
buyPanelViewModel.ISO2 = GetDataString(rdr, "ISO2");
|
||||
buyPanelViewModel.CountryName = GetDataString(rdr, "CountryName");
|
||||
}
|
||||
|
||||
await rdr.NextResultAsync();
|
||||
|
||||
while (await rdr.ReadAsync())
|
||||
{
|
||||
BuyGroup buyGroup = new BuyGroup
|
||||
{
|
||||
BuyGroupID = GetDataInt(rdr, "BuyGroupID"),
|
||||
Message = GetDataString(rdr, "Message"),
|
||||
DisplayOrder = GetDataInt(rdr, "DisplayOrder"),
|
||||
GroupName = GetDataString(rdr, "GroupName")
|
||||
};
|
||||
buyPanelViewModel.Groups.Add(buyGroup);
|
||||
}
|
||||
|
||||
await rdr.NextResultAsync();
|
||||
|
||||
while (await rdr.ReadAsync())
|
||||
{
|
||||
BuyLink buyLink = new BuyLink
|
||||
{
|
||||
BuyGroupID = GetDataInt(rdr, "BuyGroupID"),
|
||||
BuyLinkID = GetDataInt(rdr, "BuyLinkID"),
|
||||
ISO2 = GetDataString(rdr, "ISO2"),
|
||||
Price = GetDataString(rdr, "Price"),
|
||||
Slug = GetDataString(rdr, "Slug"),
|
||||
Target = GetDataString(rdr, "Target"),
|
||||
Icon = GetDataString(rdr, "Icon"),
|
||||
Text = GetDataString(rdr, "Text")
|
||||
};
|
||||
var group = buyPanelViewModel.Groups.Find(g => g.BuyGroupID == buyLink.BuyGroupID);
|
||||
if (group != null)
|
||||
{
|
||||
group.Links.Add(buyLink);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return buyPanelViewModel;
|
||||
}
|
||||
public async Task<bool> AddBlogCommentAsync(BlogComment blogComment)
|
||||
{
|
||||
bool visible = false;
|
||||
@ -297,7 +222,7 @@ namespace CatherineLynwood.Services
|
||||
WordIndex = GetDataInt(rdr, "WordIndex"),
|
||||
ExpectedWord = GetDataString(rdr, "ExpectedWord"),
|
||||
AccessLevel = GetDataInt(rdr, "AccessLevel"),
|
||||
BookNumber = GetDataInt(rdr, "BookNumber")
|
||||
BookID = GetDataInt(rdr, "BookID")
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -618,6 +543,77 @@ namespace CatherineLynwood.Services
|
||||
return blogIndex;
|
||||
}
|
||||
|
||||
public async Task<BuyPanelViewModel> GetBuyPanelViewModel(string iso2, string title)
|
||||
{
|
||||
BuyPanelViewModel buyPanelViewModel = new BuyPanelViewModel();
|
||||
|
||||
using (SqlConnection conn = new SqlConnection(_connectionString))
|
||||
{
|
||||
using (SqlCommand cmd = new SqlCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
cmd.Connection = conn;
|
||||
cmd.CommandType = CommandType.StoredProcedure;
|
||||
cmd.CommandText = "GetBuyLinks";
|
||||
cmd.Parameters.AddWithValue("@ISO2", iso2);
|
||||
cmd.Parameters.AddWithValue("@Title", title);
|
||||
|
||||
using (SqlDataReader rdr = await cmd.ExecuteReaderAsync())
|
||||
{
|
||||
while (await rdr.ReadAsync())
|
||||
{
|
||||
buyPanelViewModel.ISO2 = GetDataString(rdr, "ISO2");
|
||||
buyPanelViewModel.CountryName = GetDataString(rdr, "CountryName");
|
||||
}
|
||||
|
||||
await rdr.NextResultAsync();
|
||||
|
||||
while (await rdr.ReadAsync())
|
||||
{
|
||||
BuyGroup buyGroup = new BuyGroup
|
||||
{
|
||||
BuyGroupID = GetDataInt(rdr, "BuyGroupID"),
|
||||
Message = GetDataString(rdr, "Message"),
|
||||
DisplayOrder = GetDataInt(rdr, "DisplayOrder"),
|
||||
GroupName = GetDataString(rdr, "GroupName")
|
||||
};
|
||||
buyPanelViewModel.Groups.Add(buyGroup);
|
||||
}
|
||||
|
||||
await rdr.NextResultAsync();
|
||||
|
||||
while (await rdr.ReadAsync())
|
||||
{
|
||||
BuyLink buyLink = new BuyLink
|
||||
{
|
||||
BuyGroupID = GetDataInt(rdr, "BuyGroupID"),
|
||||
BuyLinkID = GetDataInt(rdr, "BuyLinkID"),
|
||||
ISO2 = GetDataString(rdr, "ISO2"),
|
||||
Price = GetDataString(rdr, "Price"),
|
||||
Slug = GetDataString(rdr, "Slug"),
|
||||
Target = GetDataString(rdr, "Target"),
|
||||
Icon = GetDataString(rdr, "Icon"),
|
||||
Text = GetDataString(rdr, "Text")
|
||||
};
|
||||
var group = buyPanelViewModel.Groups.Find(g => g.BuyGroupID == buyLink.BuyGroupID);
|
||||
if (group != null)
|
||||
{
|
||||
group.Links.Add(buyLink);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return buyPanelViewModel;
|
||||
}
|
||||
|
||||
public async Task<List<BlogPost>> GetDueBlogPostsAsync()
|
||||
{
|
||||
List<BlogPost> blogPosts = new List<BlogPost>();
|
||||
|
||||
@ -50,9 +50,9 @@
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<div class="d-flex gap-3 align-items-center">
|
||||
<responsive-image src="the-alpha-flame-discovery-cover.png"
|
||||
<responsive-image src="the-alpha-flame-discovery-audiobook.png"
|
||||
class="img-fluid rounded"
|
||||
alt="The Alpha Flame book cover — gritty 1980s Birmingham crime novel about twin sisters uncovering secrets and surviving abuse"
|
||||
alt="The Alpha Flame Audiobook Cover — gritty 1980s Birmingham crime novel about twin sisters uncovering secrets and surviving abuse"
|
||||
display-width-percentage="20" style="max-width: 120px;"></responsive-image>
|
||||
<div>
|
||||
<div class="fw-semibold">Narration</div>
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
<li class="breadcrumb-item"><a asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Index">The Alpha Flame</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="Discovery" asp-action="Index">Discovery</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="Discovery" asp-action="Extras">Extras</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Extras">Extras</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Epilogue</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
@{
|
||||
ViewData["Title"] = "Extras";
|
||||
|
||||
ViewData["Title"] = "The Alpha Flame: Discovery Extras";
|
||||
int? accessLevel = Context.Session.GetInt32("BookAccessLevel");
|
||||
int? accessBook = Context.Session.GetInt32("BookAccessMax");
|
||||
|
||||
}
|
||||
|
||||
<div class="row">
|
||||
@ -19,100 +19,43 @@
|
||||
</div>
|
||||
|
||||
<div class="container mt-5">
|
||||
<h1 class="extras-header">Your Exclusive Extras</h1>
|
||||
|
||||
@if (accessBook == 1)
|
||||
{
|
||||
<div class="extras-grid mt-4">
|
||||
@if (accessLevel >= 1)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Epilogue</h5>
|
||||
<p class="card-text">Immerse yourself in the Eplilogue to The Alpha Flame: Discovery. Join the team as they relax for a quite drink at the Barnt Green Inn</p>
|
||||
<a asp-controller="Discovery" asp-action="Epilogue" class="btn btn-dark btn-sm">Read or Listen</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (accessLevel >= 2)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Discovery Scrap Book</h5>
|
||||
<p class="card-text">Take a look at my image scrapbook for The Alpha Flame: Discovery. View the images I used for inspiration when writing the various scenes within the book.</p>
|
||||
<a asp-controller="Discovery" asp-action="ScrapBook" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Discovery Soundtrack</h5>
|
||||
<p class="card-text">Have a listen to The Alpha Flame soundtrack. A selection of original songs written by me and put to music.</p>
|
||||
<a asp-controller="Discovery" asp-action="Soundtrack" class="btn btn-dark btn-sm">Soundtrack</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (accessLevel >= 3)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Listen to The Alpha Flame: Discovery</h5>
|
||||
<p class="card-text">Because you've purchased a premium physical copy of The Alpha Flame: Discovery, for a limited time this entitles you to listen to the audio version with no extra charge.</p>
|
||||
<a asp-controller="Discovery" asp-action="Listen" class="btn btn-dark btn-sm">Listen to the Book</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Scrapbook: Maggie’s Designs</h5>
|
||||
<p class="card-text">Flip through Maggie’s sketches, fashion notes, and photos from her original designs – including the infamous red skirt.</p>
|
||||
<a asp-controller="Discovery" asp-action="MaggiesDesigns" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
else if (accessBook == 2)
|
||||
{
|
||||
|
||||
<div class="extras-grid mt-4">
|
||||
@if (accessLevel >= 1)
|
||||
{
|
||||
|
||||
}
|
||||
else if (accessLevel >= 2)
|
||||
{
|
||||
|
||||
}
|
||||
else if (accessLevel >= 3)
|
||||
{
|
||||
|
||||
}
|
||||
else if(accessLevel >= 4)
|
||||
{
|
||||
|
||||
}
|
||||
<h1 class="extras-header">The Alpha Flame Discovery Exclusive Extras</h1>
|
||||
<div class="extras-grid mt-4">
|
||||
@if (accessLevel >= 1)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Epilogue</h5>
|
||||
<p class="card-text">Immerse yourself in the Eplilogue to The Alpha Flame: Discovery. Join the team as they relax for a quite drink at the Barnt Green Inn</p>
|
||||
<a asp-controller="Discovery" asp-action="Epilogue" class="btn btn-dark btn-sm">Read or Listen</a>
|
||||
<a asp-action="Epilogue" class="btn btn-dark btn-sm">Read or Listen</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
}
|
||||
@if (accessLevel >= 2)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Discovery Scrap Book</h5>
|
||||
<p class="card-text">Take a look at my image scrapbook for The Alpha Flame: Discovery. View the images I used for inspiration when writing the various scenes within the book.</p>
|
||||
<a asp-controller="Discovery" asp-action="ScrapBook" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
<a asp-action="ScrapBook" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Rubery Hill Photo Archive</h5>
|
||||
<p class="card-text">Explore historical photos and floor plans of the real Rubery Hill Hospital, the eerie inspiration behind key scenes.</p>
|
||||
<a href="/extras/rubery-hill-photos" class="btn btn-dark btn-sm">Explore</a>
|
||||
<h5 class="card-title">Discovery Soundtrack</h5>
|
||||
<p class="card-text">Have a listen to The Alpha Flame soundtrack. A selection of original songs written by me and put to music.</p>
|
||||
<a asp-action="Soundtrack" class="btn btn-dark btn-sm">Soundtrack</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (accessLevel >= 3)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Listen to The Alpha Flame: Discovery</h5>
|
||||
<p class="card-text">Because you've purchased a premium physical copy of The Alpha Flame: Discovery, for a limited time this entitles you to listen to the audio version with no extra charge.</p>
|
||||
<a asp-action="Listen" class="btn btn-dark btn-sm">Listen to the Book</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -120,53 +63,11 @@
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Scrapbook: Maggie’s Designs</h5>
|
||||
<p class="card-text">Flip through Maggie’s sketches, fashion notes, and photos from her original designs – including the infamous red skirt.</p>
|
||||
<a asp-controller="Discovery" asp-action="MaggiesDesigns" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
<a asp-action="MaggiesDesigns" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
}
|
||||
else if (accessBook == 3)
|
||||
{
|
||||
<div class="extras-grid mt-4">
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Epilogue</h5>
|
||||
<p class="card-text">Immerse yourself in the Eplilogue to The Alpha Flame: Discovery. Join the team as they relax for a quite drink at the Barnt Green Inn</p>
|
||||
<a asp-controller="Discovery" asp-action="Epilogue" class="btn btn-dark btn-sm">Read or Listen</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Discovery Scrap Book</h5>
|
||||
<p class="card-text">Take a look at my image scrapbook for The Alpha Flame: Discovery. View the images I used for inspiration when writing the various scenes within the book.</p>
|
||||
<a asp-controller="Discovery" asp-action="ScrapBook" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Rubery Hill Photo Archive</h5>
|
||||
<p class="card-text">Explore historical photos and floor plans of the real Rubery Hill Hospital, the eerie inspiration behind key scenes.</p>
|
||||
<a href="/extras/rubery-hill-photos" class="btn btn-dark btn-sm">Explore</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Scrapbook: Maggie’s Designs</h5>
|
||||
<p class="card-text">Flip through Maggie’s sketches, fashion notes, and photos from her original designs – including the infamous red skirt.</p>
|
||||
<a asp-controller="Discovery" asp-action="MaggiesDesigns" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@section Meta{
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
<li class="breadcrumb-item"><a asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Index">The Alpha Flame</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="Discovery" asp-action="Index">Discovery</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="Discovery" asp-action="Extras">Extras</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Extras">Extras</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Listen</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
<li class="breadcrumb-item"><a asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Index">The Alpha Flame</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="Discovery" asp-action="Index">Discovery</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="Discovery" asp-action="Extras">Extras</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Extras">Extras</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Maggie's Designs</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
<li class="breadcrumb-item"><a asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Index">The Alpha Flame</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="Discovery" asp-action="Index">Discovery</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="Discovery" asp-action="Extras">Extras</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Extras">Extras</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Discovery Scrap Book</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
Layout = "/Views/Shared/_Layout.cshtml";
|
||||
}
|
||||
|
||||
@section CSS{
|
||||
@section CSS {
|
||||
<style>
|
||||
.video-overlay {
|
||||
background-color: rgba(13, 202, 240, 0.2);
|
||||
|
||||
@ -60,7 +60,7 @@
|
||||
|
||||
<div class="d-flex gap-3 flex-wrap mb-4">
|
||||
<a asp-controller="Discovery" asp-action="Index" class="btn btn-dark">Explore Discovery</a>
|
||||
<a asp-controller="Discovery" asp-action="Extras" class="btn btn-outline-dark">Unlock Extras</a>
|
||||
<a asp-controller="TheAlphaFlame" asp-action="Extras" class="btn btn-outline-dark">Unlock Extras</a>
|
||||
</div>
|
||||
|
||||
<h2 class="h4 fw-bold">
|
||||
|
||||
335
CatherineLynwood/Views/IndieAuthor/AiForAuthors.cshtml
Normal file
335
CatherineLynwood/Views/IndieAuthor/AiForAuthors.cshtml
Normal file
@ -0,0 +1,335 @@
|
||||
@{
|
||||
ViewData["Title"] = "AI for Authors";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">AI for Authors</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">AI for authors, practical use without losing your soul</h1>
|
||||
<p class="lead mb-3">
|
||||
AI has become one of the biggest talking points in writing and publishing, which is hardly surprising.
|
||||
It can generate text, create images, read words aloud, suggest ideas, and generally poke its nose into
|
||||
almost every creative workflow going. That does not mean authors need to hand over the keys to the kingdom.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This page looks at how AI can be used as a practical tool for indie authors, from brainstorming and
|
||||
image inspiration to editing support and voice playback, while keeping the actual writing, judgement
|
||||
and creative direction firmly in human hands where they belong.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="what-ai-is-good-for" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What AI is actually good for</h2>
|
||||
<p>
|
||||
AI is often most useful when it is treated as an assistant rather than an author. It can help
|
||||
generate options, organise thoughts, test ideas, summarise information, and speed up certain
|
||||
repetitive tasks.
|
||||
</p>
|
||||
<p>
|
||||
Used sensibly, it can be helpful for:
|
||||
</p>
|
||||
<ul>
|
||||
<li>brainstorming ideas</li>
|
||||
<li>testing scene descriptions</li>
|
||||
<li>creating image inspiration</li>
|
||||
<li>reading text aloud with synthetic voices</li>
|
||||
<li>spotting awkward phrasing or repetition</li>
|
||||
<li>helping structure notes and workflows</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
It is strongest when used to support your process, not replace your creative brain.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="what-ai-is-bad-for" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What AI is bad for</h2>
|
||||
<p>
|
||||
AI can sound convincing while being wrong, bland, generic, or weirdly overconfident. It also has
|
||||
a strong tendency to produce text that looks smooth on the surface while lacking depth, originality
|
||||
and genuine emotional intelligence.
|
||||
</p>
|
||||
<p>
|
||||
That makes it a poor replacement for:
|
||||
</p>
|
||||
<ul>
|
||||
<li>the core writing of a novel</li>
|
||||
<li>authentic voice and character work</li>
|
||||
<li>subtle emotional judgement</li>
|
||||
<li>deep originality</li>
|
||||
<li>final creative decision-making</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
In other words, it can assist with craft and process, but it is not your imagination and should not be mistaken for it.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="brainstorming-and-idea-testing" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Brainstorming and testing ideas</h2>
|
||||
<p>
|
||||
One of the best uses of AI for authors is as a thinking partner when you are trying to clarify an idea.
|
||||
That might mean exploring plot possibilities, testing alternate scene directions, or asking for suggestions
|
||||
when something in the story feels thin or unclear.
|
||||
</p>
|
||||
<p>
|
||||
The value here is not that the AI magically produces the perfect answer. It is that it can throw possibilities
|
||||
back at you quickly, helping you react, reject, refine and sharpen your own thoughts.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Sometimes the most useful AI answer is the one that makes you realise what you do not want.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="ai-for-editing-support" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Using AI to support editing</h2>
|
||||
<p>
|
||||
AI can be useful during editing, especially when you want another angle on the text. It can help identify
|
||||
repetition, flag clunky phrasing, suggest places that may need tightening, or help summarise structural issues
|
||||
you are already circling around.
|
||||
</p>
|
||||
<p>
|
||||
That said, its suggestions still need judgement. AI is perfectly capable of recommending changes that flatten
|
||||
style, simplify voice, or remove exactly the thing that made the writing interesting in the first place.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The trick is to use it as a filter for possibilities, not as a final editor issuing commandments from a silicon mountaintop.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="ai-voice-playback" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">AI voice playback and hearing the text</h2>
|
||||
<p>
|
||||
One of the most practical uses of AI for authors is synthetic voice playback. Hearing your words read aloud
|
||||
can reveal problems you simply do not notice while reading silently.
|
||||
</p>
|
||||
<p>
|
||||
It can help expose:
|
||||
</p>
|
||||
<ul>
|
||||
<li>repetition</li>
|
||||
<li>missing words</li>
|
||||
<li>awkward rhythm</li>
|
||||
<li>unnatural dialogue</li>
|
||||
<li>sentences that look fine but sound dreadful</li>
|
||||
</ul>
|
||||
<p>
|
||||
This can be especially useful because your own eyes are too forgiving. They know what you meant to write and
|
||||
often glide right over the bits that need fixing.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The synthetic voice creates just enough distance to let you hear the work more honestly.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="ai-images-for-inspiration" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Using AI images for inspiration</h2>
|
||||
<p>
|
||||
AI image tools can be genuinely helpful when you are trying to visualise a character, a location, a mood,
|
||||
or the atmosphere of a scene. Sometimes putting a description into an image model helps clarify what you have
|
||||
been trying to picture all along.
|
||||
</p>
|
||||
<p>
|
||||
This can be useful for:
|
||||
</p>
|
||||
<ul>
|
||||
<li>character inspiration</li>
|
||||
<li>setting exploration</li>
|
||||
<li>cover concept mood boards</li>
|
||||
<li>marketing ideas</li>
|
||||
<li>checking whether a description produces the feel you intended</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Used this way, AI imagery is less about replacing art and more about helping ideas become visible.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="ai-for-cover-concepts" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">AI in the cover design process</h2>
|
||||
<p>
|
||||
AI can also play a role in cover development, not necessarily as the final cover, but as a way to test mood,
|
||||
composition, symbolism and visual direction before doing the serious design work.
|
||||
</p>
|
||||
<p>
|
||||
It is useful for rough concepts because it is fast. You can try multiple directions without spending hours
|
||||
building each one from scratch. That speed makes it good for exploration.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The danger is confusing a striking AI image with a functional book cover. A cover still needs typography,
|
||||
hierarchy, genre signalling and all the boring practical bits that actually help sell books.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="ai-for-marketing-and-admin" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">AI for marketing and admin support</h2>
|
||||
<p>
|
||||
Beyond writing and visuals, AI can be handy for the more practical side of author life. It can help draft
|
||||
blog outlines, summarise ideas for newsletters, suggest website structures, help organise launch plans,
|
||||
or turn messy thoughts into something more structured.
|
||||
</p>
|
||||
<p>
|
||||
This is often where AI shines because these tasks benefit from speed and structure without demanding that
|
||||
the tool be the true creative source.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
It is much easier to let AI help with the admin jungle than to trust it with the heart of your novel.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="ethical-and-creative-concerns" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Ethical and creative concerns</h2>
|
||||
<p>
|
||||
AI does raise real questions, and authors are right to think about them seriously. Concerns often include
|
||||
originality, training data, authorship, transparency, and the risk of flooding the market with low-effort work.
|
||||
</p>
|
||||
<p>
|
||||
There is a meaningful difference between using AI as a practical support tool and using it to mass-produce
|
||||
hollow content while pretending it is the same as real creative labour.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Authors should think carefully about where they draw their own line and be honest about how they use these tools.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="common-mistakes-with-ai" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Common mistakes authors make with AI</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>treating AI output as final rather than provisional</li>
|
||||
<li>allowing it to flatten personal voice</li>
|
||||
<li>using it to generate generic prose and calling it creativity</li>
|
||||
<li>trusting facts or claims without checking them</li>
|
||||
<li>mistaking speed for quality</li>
|
||||
<li>letting the tool dictate the project instead of serving it</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="a-sensible-approach" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">A sensible way to approach AI</h2>
|
||||
<p>
|
||||
The most useful mindset is probably this: let AI help with the bits that benefit from speed, iteration,
|
||||
and alternate perspectives, but keep the core creative work under human control.
|
||||
</p>
|
||||
<p>
|
||||
That means using it to support:
|
||||
</p>
|
||||
<ul>
|
||||
<li>idea exploration</li>
|
||||
<li>editing passes</li>
|
||||
<li>voice playback</li>
|
||||
<li>visual inspiration</li>
|
||||
<li>workflow organisation</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
It does not mean handing over authorship and hoping the machine accidentally produces a soul.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="my-view-on-ai" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view on AI for authors</h2>
|
||||
<p>
|
||||
I think AI is a useful tool when kept in its proper place. It can support creativity, sharpen process,
|
||||
speed up exploration, and help authors catch things they might otherwise miss. That is valuable.
|
||||
</p>
|
||||
<p>
|
||||
But I do not think it replaces actual writing, actual judgement, or actual artistic intent. The danger is
|
||||
not that AI exists. The danger is that people start mistaking convenience for craft.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Used properly, AI can make an author more effective. Used lazily, it just makes the work emptier faster.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#what-ai-is-good-for" class="text-decoration-none">What AI is good for</a></li>
|
||||
<li class="mb-2"><a href="#what-ai-is-bad-for" class="text-decoration-none">What AI is bad for</a></li>
|
||||
<li class="mb-2"><a href="#brainstorming-and-idea-testing" class="text-decoration-none">Brainstorming and ideas</a></li>
|
||||
<li class="mb-2"><a href="#ai-for-editing-support" class="text-decoration-none">Editing support</a></li>
|
||||
<li class="mb-2"><a href="#ai-voice-playback" class="text-decoration-none">AI voice playback</a></li>
|
||||
<li class="mb-2"><a href="#ai-images-for-inspiration" class="text-decoration-none">AI images for inspiration</a></li>
|
||||
<li class="mb-2"><a href="#ai-for-cover-concepts" class="text-decoration-none">AI for cover concepts</a></li>
|
||||
<li class="mb-2"><a href="#ai-for-marketing-and-admin" class="text-decoration-none">Marketing and admin</a></li>
|
||||
<li class="mb-2"><a href="#ethical-and-creative-concerns" class="text-decoration-none">Ethical concerns</a></li>
|
||||
<li class="mb-2"><a href="#common-mistakes-with-ai" class="text-decoration-none">Common mistakes</a></li>
|
||||
<li class="mb-2"><a href="#a-sensible-approach" class="text-decoration-none">A sensible approach</a></li>
|
||||
<li><a href="#my-view-on-ai" class="text-decoration-none">My view</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
AI is useful as a support tool for ideas, editing, images and workflow, but it is not a substitute
|
||||
for voice, judgement or genuine creative intent.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="EditingAndProofreading" class="text-decoration-none">
|
||||
Editing and Proofreading
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="CoverDesign" class="text-decoration-none">
|
||||
Cover Design
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="TraditionalVsSelfPublishing" class="text-decoration-none">
|
||||
Traditional vs Self Publishing
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="AuthorFinances" class="btn btn-dark">
|
||||
Previous: Author Finances
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="Index" class="btn btn-dark">
|
||||
Back to guide index
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
360
CatherineLynwood/Views/IndieAuthor/AmazonAdvertising.cshtml
Normal file
360
CatherineLynwood/Views/IndieAuthor/AmazonAdvertising.cshtml
Normal file
@ -0,0 +1,360 @@
|
||||
@{
|
||||
ViewData["Title"] = "Amazon Advertising for Indie Authors";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Amazon Advertising</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Amazon Advertising for indie authors</h1>
|
||||
<p class="lead mb-3">
|
||||
Amazon Ads can be one of the most obvious ways to get your book in front of readers, and one of
|
||||
the easiest ways to burn through money while feeling oddly productive. The platform makes it look
|
||||
wonderfully simple... set a bid, choose some targets, launch a campaign, and wait for readers to
|
||||
appear. Real life is a bit less romantic.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This page looks at how Amazon advertising works for indie authors, the different campaign types,
|
||||
pay-per-click costs, why a single book often struggles to make advertising profitable, and why
|
||||
the long-term value usually comes from building a catalogue rather than expecting one title to
|
||||
carry the entire business on its back.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="what-amazon-ads-are" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What Amazon Ads actually are</h2>
|
||||
<p>
|
||||
Amazon advertising allows you to pay for placement inside Amazon’s own shopping ecosystem.
|
||||
Your book can appear in search results, on product pages, and in other positions where
|
||||
potential readers might see it while browsing.
|
||||
</p>
|
||||
<p>
|
||||
The core idea is simple. You bid for visibility. If somebody clicks your ad, you pay.
|
||||
Whether that click turns into a sale is another matter entirely.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
That means advertising is not really about buying sales directly. It is about paying for
|
||||
the chance to be seen.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="pay-per-click" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Pay per click, not pay per sale</h2>
|
||||
<p>
|
||||
This is the first thing authors need to understand properly. Amazon Ads are generally
|
||||
<strong>pay per click</strong>. You pay when somebody clicks the ad, not when they buy
|
||||
the book.
|
||||
</p>
|
||||
<p>
|
||||
So if your ad gets plenty of clicks but your cover, blurb, reviews, or sample do not
|
||||
convince people to buy, you still pay for the traffic.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
In other words, ads do not rescue a weak product page. They simply send more people to it.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="campaign-types" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">The main campaign types</h2>
|
||||
<p>
|
||||
Amazon offers different types of ad targeting, and each behaves a little differently.
|
||||
The most common options for authors are:
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>Automatic targeting</strong>, where Amazon decides where to place the ad based on your book</li>
|
||||
<li><strong>Keyword targeting</strong>, where you target search terms readers may use</li>
|
||||
<li><strong>Product targeting</strong>, where you target specific books or similar product pages</li>
|
||||
</ul>
|
||||
<p>
|
||||
Automatic campaigns can be useful for testing and discovery. Manual campaigns give you more
|
||||
control and often better insight into what is working.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Most authors eventually end up using a mixture rather than relying on one type alone.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="keywords-and-targeting" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Keywords, product targeting and relevance</h2>
|
||||
<p>
|
||||
Advertising works best when the ad is shown to people who are already likely to be interested
|
||||
in your sort of book. That sounds obvious, yet plenty of campaigns get built on vague hopeful
|
||||
thinking rather than actual relevance.
|
||||
</p>
|
||||
<p>
|
||||
Good targeting often means:
|
||||
</p>
|
||||
<ul>
|
||||
<li>relevant search keywords</li>
|
||||
<li>comparable books in similar genres or niches</li>
|
||||
<li>authors with overlapping readerships</li>
|
||||
<li>tightly focused themes rather than broad wishful nonsense</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
A thriller should not be wandering drunkenly into places where cosy romance readers are minding
|
||||
their own business, unless you enjoy paying for useless clicks.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="bids-and-budgets" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Bids and daily budgets</h2>
|
||||
<p>
|
||||
Two of the main controls in Amazon Ads are your bid and your daily budget.
|
||||
</p>
|
||||
<p>
|
||||
Your <strong>bid</strong> is roughly what you are willing to pay for a click. Your
|
||||
<strong>daily budget</strong> is how much you are prepared to spend in a day before the
|
||||
campaign pauses.
|
||||
</p>
|
||||
<p>
|
||||
These settings sound simple, but they interact with competition, ad placement and conversion
|
||||
rate. Bid too low and the ad barely appears. Bid too high and you can spend money at a truly
|
||||
irritating speed.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Advertising is basically a controlled experiment in buying attention, so small adjustments are
|
||||
usually wiser than dramatic flailing.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="why-one-book-struggles" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why one book often does not make ads profitable</h2>
|
||||
<p>
|
||||
This is the bit a lot of people learn the hard way. If you only have one book, the economics
|
||||
of advertising can be rough.
|
||||
</p>
|
||||
<p>
|
||||
Your ad spend is competing against the royalty from a single sale. Depending on your format,
|
||||
price point, print cost, and click costs, it can be very difficult to make the numbers work.
|
||||
</p>
|
||||
<p>
|
||||
That is why many indie authors say the real value of ads becomes clearer once you have a
|
||||
<strong>catalogue</strong>. If a reader discovers one book and then goes on to buy others,
|
||||
the advertising spend starts to support a bigger ecosystem rather than one lonely product.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
A portfolio changes the maths. One book usually takes the hit by itself.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="the-value-of-a-catalogue" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why a catalogue matters</h2>
|
||||
<p>
|
||||
Advertising becomes more interesting when readers have somewhere else to go after the first book.
|
||||
That could mean:
|
||||
</p>
|
||||
<ul>
|
||||
<li>other books in a series</li>
|
||||
<li>more books by the same author</li>
|
||||
<li>linked standalone titles</li>
|
||||
<li>different formats such as ebook, print and audio</li>
|
||||
</ul>
|
||||
<p>
|
||||
In that situation, an ad is not just trying to recover the profit from one sale. It may be
|
||||
helping to acquire a reader who returns more than once.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
That is a much stronger business model than endlessly trying to bully one book into paying for everything.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="what-makes-an-ad-convert" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What actually makes the ad convert</h2>
|
||||
<p>
|
||||
The ad itself is only the front door. Once a reader clicks, the product page does the real work.
|
||||
</p>
|
||||
<p>
|
||||
Things that influence conversion include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>cover design</li>
|
||||
<li>book title and subtitle</li>
|
||||
<li>blurb quality</li>
|
||||
<li>reviews and ratings</li>
|
||||
<li>sample readability</li>
|
||||
<li>price</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
If those things are weak, advertising simply delivers more people to a page that fails to persuade them.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="measuring-results" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Measuring results properly</h2>
|
||||
<p>
|
||||
One of the traps with advertising is obsessing over impressions or clicks without paying enough
|
||||
attention to what matters further down the chain.
|
||||
</p>
|
||||
<p>
|
||||
Things worth watching include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>click-through rate</li>
|
||||
<li>cost per click</li>
|
||||
<li>spend over time</li>
|
||||
<li>sales attributed to the campaign</li>
|
||||
<li>overall profitability, not just activity</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Busy dashboards can look exciting while quietly draining money. Data needs interpretation, not admiration.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="common-mistakes" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Common mistakes authors make</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>running ads before the book page is strong enough</li>
|
||||
<li>bidding too aggressively too early</li>
|
||||
<li>targeting too broadly</li>
|
||||
<li>expecting immediate profit from one book</li>
|
||||
<li>focusing on clicks instead of sales and read-through</li>
|
||||
<li>changing too many variables at once</li>
|
||||
<li>assuming more spend automatically means more success</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="what-amazon-ads-get-right" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What Amazon Ads get right</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>they place books in front of readers already browsing Amazon</li>
|
||||
<li>they are accessible to indie authors without huge budgets</li>
|
||||
<li>they offer multiple targeting methods</li>
|
||||
<li>they provide measurable campaign data</li>
|
||||
<li>they can support long-term visibility if used sensibly</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="what-amazon-ads-get-wrong" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What Amazon Ads get wrong</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>they make advertising look easier than it is</li>
|
||||
<li>they encourage spending before authors understand the economics</li>
|
||||
<li>reporting can look clearer than the true business picture</li>
|
||||
<li>they do not solve weak conversion problems</li>
|
||||
<li>they can punish optimism with brutal efficiency</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="my-view-on-amazon-ads" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view on Amazon advertising</h2>
|
||||
<p>
|
||||
I think Amazon Ads can be useful, but they need to be approached with realistic expectations.
|
||||
They are not a magic machine for turning books into profit. They are one tool among many for
|
||||
increasing visibility.
|
||||
</p>
|
||||
<p>
|
||||
The biggest mindset shift is understanding that advertising often makes more sense as part of a
|
||||
longer-term author strategy rather than as a quick win on one title. If readers enjoy one book
|
||||
and go on to buy others, the spend starts to make more sense. Without that wider ecosystem, it
|
||||
can be a much tougher slog.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
So yes, use ads if they suit your strategy... but keep one eye on the numbers and the other on
|
||||
your remaining pound coins.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#what-amazon-ads-are" class="text-decoration-none">What Amazon Ads are</a></li>
|
||||
<li class="mb-2"><a href="#pay-per-click" class="text-decoration-none">Pay per click</a></li>
|
||||
<li class="mb-2"><a href="#campaign-types" class="text-decoration-none">Campaign types</a></li>
|
||||
<li class="mb-2"><a href="#keywords-and-targeting" class="text-decoration-none">Keywords and targeting</a></li>
|
||||
<li class="mb-2"><a href="#bids-and-budgets" class="text-decoration-none">Bids and budgets</a></li>
|
||||
<li class="mb-2"><a href="#why-one-book-struggles" class="text-decoration-none">Why one book struggles</a></li>
|
||||
<li class="mb-2"><a href="#the-value-of-a-catalogue" class="text-decoration-none">Why a catalogue matters</a></li>
|
||||
<li class="mb-2"><a href="#what-makes-an-ad-convert" class="text-decoration-none">What makes an ad convert</a></li>
|
||||
<li class="mb-2"><a href="#measuring-results" class="text-decoration-none">Measuring results</a></li>
|
||||
<li class="mb-2"><a href="#common-mistakes" class="text-decoration-none">Common mistakes</a></li>
|
||||
<li class="mb-2"><a href="#what-amazon-ads-get-right" class="text-decoration-none">What Amazon Ads get right</a></li>
|
||||
<li class="mb-2"><a href="#what-amazon-ads-get-wrong" class="text-decoration-none">What Amazon Ads get wrong</a></li>
|
||||
<li><a href="#my-view-on-amazon-ads" class="text-decoration-none">My view</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
Amazon Ads can help with visibility, but one book alone often struggles to make the
|
||||
economics work. A catalogue gives advertising far more room to breathe.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="ReviewsAndArcReaders" class="text-decoration-none">
|
||||
Reviews and ARC Readers
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="AuthorFinances" class="text-decoration-none">
|
||||
Author Finances
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="Kdp" class="text-decoration-none">
|
||||
Publishing on KDP
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="ReviewsAndArcReaders" class="btn btn-dark">
|
||||
Previous: Reviews and ARC Readers
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="AuthorFinances" class="btn btn-dark">
|
||||
Next: Author Finances
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
375
CatherineLynwood/Views/IndieAuthor/Audiobooks.cshtml
Normal file
375
CatherineLynwood/Views/IndieAuthor/Audiobooks.cshtml
Normal file
@ -0,0 +1,375 @@
|
||||
@{
|
||||
ViewData["Title"] = "Audiobooks and Amazon ACX";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Audiobooks and ACX</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Audiobooks, narration and Amazon ACX</h1>
|
||||
<p class="lead mb-3">
|
||||
Audiobooks can make a book feel gloriously alive. A good narrator adds warmth, tone, character and rhythm
|
||||
in a way the printed page simply cannot. They also introduce a whole new production process, with fresh
|
||||
costs, technical requirements, and plenty of opportunities for things to go slightly sideways.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This page covers how indie authors approach audiobook creation, how ACX fits into the picture, how to
|
||||
find a narrator, what editing involves, and why the technical side, chapter files, sound levels, opening
|
||||
credits and all, matters more than many people realise at the start.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="why-audiobooks-matter" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why audiobooks matter</h2>
|
||||
<p>
|
||||
Audiobooks are not just an optional extra any more. For many readers, or rather listeners, they
|
||||
are a major part of how books are consumed. Some people barely sit down with a paperback at all.
|
||||
They listen while driving, walking, working, cooking, cleaning, or trying to avoid hearing their
|
||||
own thoughts for five consecutive minutes.
|
||||
</p>
|
||||
<p>
|
||||
For an indie author, an audiobook can expand the reach of a title and give readers another way
|
||||
into the story. It can also make the work feel more premium and more complete, especially if you
|
||||
are building a proper catalogue rather than just tossing one lonely book into the void and hoping
|
||||
for the best.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The catch is that audio is not just a file conversion job. It is a performance, a production and
|
||||
a technical delivery process all rolled into one.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="what-is-acx" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What is ACX?</h2>
|
||||
<p>
|
||||
<strong>ACX</strong> is Amazon’s audiobook production and distribution platform. It connects rights
|
||||
holders, such as authors and publishers, with narrators and producers, and provides a route into
|
||||
the Audible and Amazon ecosystem.
|
||||
</p>
|
||||
<p>
|
||||
For many indie authors, ACX is the most obvious place to start because it offers both the production
|
||||
marketplace and the distribution link in one place. You can use it to find a narrator, agree terms,
|
||||
manage the production process, review the files, and publish the finished audiobook.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
In practical terms, it is often the audiobook equivalent of KDP, though with more moving parts and
|
||||
far more dependence on the human performance side of the equation.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="how-the-process-works" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">How the audiobook process works</h2>
|
||||
<p>
|
||||
From the outside, people often imagine audiobooks are made by handing a manuscript to a narrator
|
||||
and waiting for magic to occur. In reality, there is usually a proper workflow.
|
||||
</p>
|
||||
<p>
|
||||
A typical audiobook process includes:
|
||||
</p>
|
||||
<ul>
|
||||
<li>preparing the final manuscript</li>
|
||||
<li>choosing whether to narrate it yourself or hire a narrator</li>
|
||||
<li>auditioning and selecting a voice artist</li>
|
||||
<li>agreeing the payment model or royalty arrangement</li>
|
||||
<li>recording the chapters</li>
|
||||
<li>editing and cleaning the audio</li>
|
||||
<li>checking sound levels and technical compliance</li>
|
||||
<li>reviewing proof files</li>
|
||||
<li>approving the final audiobook for distribution</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
None of that is impossible, but it is more involved than uploading a Kindle file and calling it a day.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="finding-a-narrator" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Finding the right narrator</h2>
|
||||
<p>
|
||||
This is one of the biggest creative decisions in the whole process. A narrator can elevate a book
|
||||
beautifully, or drain the life out of it with all the emotional charm of a satnav reading a tax return.
|
||||
</p>
|
||||
<p>
|
||||
The right narrator is not just somebody with a pleasant voice. They need the right tone for the book,
|
||||
the right pacing, a good ear for character, and the ability to deliver material naturally over many
|
||||
hours without sounding forced or theatrical in the wrong way.
|
||||
</p>
|
||||
<p>
|
||||
Things worth listening for in auditions include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>clarity and consistency</li>
|
||||
<li>emotional fit for the story</li>
|
||||
<li>accent suitability where relevant</li>
|
||||
<li>handling of dialogue and character voices</li>
|
||||
<li>whether the reading sounds alive rather than merely correct</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
If the narrator does not feel right, the audiobook does not feel right. Simple as that.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="paying-for-production" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Paying for production, royalty share or upfront cost</h2>
|
||||
<p>
|
||||
One of the first financial choices in audiobook production is how the narrator or producer will be
|
||||
paid. Broadly speaking, you are usually looking at either an upfront payment model, a royalty share
|
||||
model, or in some cases a mixture of the two.
|
||||
</p>
|
||||
<p>
|
||||
With an upfront model, you pay for the finished audio production directly. That gives you more clarity
|
||||
over cost and generally more control, but it obviously means paying real money before the audiobook has
|
||||
earned a penny.
|
||||
</p>
|
||||
<p>
|
||||
With a royalty share arrangement, the narrator shares in the audiobook income instead. That can reduce
|
||||
upfront cost, which is appealing, but it also means you are sharing revenue later and may have fewer
|
||||
suitable narrators willing to work on that basis.
|
||||
</p>
|
||||
<div class="card border-0 bg-light rounded-4 mt-4">
|
||||
<div class="card-body p-4">
|
||||
<h3 class="h5 fw-bold mb-3">Things to weigh up</h3>
|
||||
<ul class="mb-0">
|
||||
<li>your available budget</li>
|
||||
<li>the expected market for the audiobook</li>
|
||||
<li>whether you want long-term control over income</li>
|
||||
<li>how attractive your project is to narrators on a royalty basis</li>
|
||||
<li>how quickly you want to move</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="editing-the-audio" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Editing the audio</h2>
|
||||
<p>
|
||||
Audio editing is where a lot of the invisible work lives. Even if the narration performance is strong,
|
||||
the files may still need tidying, noise reduction, spacing adjustments, pickup edits, level balancing,
|
||||
and general polishing so the end result sounds smooth and professional.
|
||||
</p>
|
||||
<p>
|
||||
This part tends to be wildly underestimated by people who have never done it before. It is not just
|
||||
about trimming a few pauses. It is about making the listening experience feel seamless.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
If you are handling any of this yourself, decent tools and careful listening matter. Audio is ruthless.
|
||||
Once you notice a click, volume jump or weird mouth noise, you cannot unhear the damned thing.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="sound-levels-and-technical-requirements" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Sound levels and technical requirements</h2>
|
||||
<p>
|
||||
Audiobook platforms do not just want a nice reading. They also want files that meet technical standards.
|
||||
That means paying attention to things like loudness, peak levels, noise floor, file format and consistent
|
||||
chapter delivery.
|
||||
</p>
|
||||
<p>
|
||||
This is the bit that often catches people out. You can have a great narration and still fail technical
|
||||
checks if the files are not prepared properly.
|
||||
</p>
|
||||
<p>
|
||||
Typical areas that matter include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>overall loudness level</li>
|
||||
<li>peak level limits</li>
|
||||
<li>background noise or hiss</li>
|
||||
<li>consistent sound from chapter to chapter</li>
|
||||
<li>clean opening and closing space</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Glamorous? No. Important? Absolutely.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="chapter-files-and-credits" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Chapter files, opening credits and closing credits</h2>
|
||||
<p>
|
||||
Audiobooks are normally delivered as separate audio files for each chapter or section, along with opening
|
||||
and closing credits. The structure matters because it affects both the listener experience and platform
|
||||
acceptance.
|
||||
</p>
|
||||
<p>
|
||||
You usually need to think about:
|
||||
</p>
|
||||
<ul>
|
||||
<li>intro and title announcements</li>
|
||||
<li>chapter naming and ordering</li>
|
||||
<li>front matter and back matter</li>
|
||||
<li>end credits wording</li>
|
||||
<li>clean file naming and organisation</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
A tidy structure makes everything easier, from proofing to upload to later corrections.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="proofing-and-approvals" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Proofing and approvals</h2>
|
||||
<p>
|
||||
Before the audiobook goes live, somebody needs to listen through and catch mistakes. That can include
|
||||
misreads, repeated lines, missing words, awkward pronunciations, pacing problems, technical faults, or
|
||||
anything else that jars.
|
||||
</p>
|
||||
<p>
|
||||
Proofing audio is time-consuming because there is no shortcut around actually listening. If the audiobook
|
||||
is ten hours long, there are not many magical ways around spending a large amount of time with it.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This is one of those stages where patience pays off. Rushing here is how errors make it into the final release.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="cover-and-metadata" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Audiobook cover and metadata</h2>
|
||||
<p>
|
||||
The audiobook also needs proper presentation. That includes suitable cover artwork in the right format,
|
||||
clean metadata, author and narrator details, title information, and a professional product description.
|
||||
</p>
|
||||
<p>
|
||||
Even though the listener experiences the book through sound, the cover still matters. People are still
|
||||
browsing store pages, still making snap judgments, and still deciding whether the book looks worth their time.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Audio may be heard with the ears, but it is still sold with the packaging.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="what-acx-gets-right" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What ACX gets right</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>It connects authors with narrators and producers in one place</li>
|
||||
<li>It gives indie authors a realistic route into the Audible ecosystem</li>
|
||||
<li>It provides a defined production workflow</li>
|
||||
<li>It helps structure the approval and delivery process</li>
|
||||
<li>It lowers the barrier to entering audiobook publishing</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="what-acx-gets-wrong" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What ACX gets wrong</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>It can make audiobook production look simpler than it really is</li>
|
||||
<li>The technical side can feel intimidating for new authors</li>
|
||||
<li>Distribution and exclusivity choices can be restrictive</li>
|
||||
<li>It still depends heavily on finding the right narrator, which is never a guaranteed quick win</li>
|
||||
<li>Audio production is slow compared with ebook publishing</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="my-view-on-audiobooks" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view on audiobooks as an indie author</h2>
|
||||
<p>
|
||||
Audiobooks are brilliant, but they are not the easy add-on some people imagine. They take time, attention,
|
||||
money, technical care and a lot of listening. When done well, though, they can add enormous value to a book
|
||||
and create a completely different experience for readers.
|
||||
</p>
|
||||
<p>
|
||||
I think the key is to treat the audiobook as its own production, not as an afterthought. It deserves the same
|
||||
care as the print and ebook versions, because once listeners press play, they are trusting you with hours of
|
||||
their time and a voice will now carry your story instead of the reader’s own imagination.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
That is a powerful thing when it works. And painfully obvious when it does not.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#why-audiobooks-matter" class="text-decoration-none">Why audiobooks matter</a></li>
|
||||
<li class="mb-2"><a href="#what-is-acx" class="text-decoration-none">What is ACX?</a></li>
|
||||
<li class="mb-2"><a href="#how-the-process-works" class="text-decoration-none">How the process works</a></li>
|
||||
<li class="mb-2"><a href="#finding-a-narrator" class="text-decoration-none">Finding a narrator</a></li>
|
||||
<li class="mb-2"><a href="#paying-for-production" class="text-decoration-none">Paying for production</a></li>
|
||||
<li class="mb-2"><a href="#editing-the-audio" class="text-decoration-none">Editing the audio</a></li>
|
||||
<li class="mb-2"><a href="#sound-levels-and-technical-requirements" class="text-decoration-none">Sound levels and requirements</a></li>
|
||||
<li class="mb-2"><a href="#chapter-files-and-credits" class="text-decoration-none">Chapter files and credits</a></li>
|
||||
<li class="mb-2"><a href="#proofing-and-approvals" class="text-decoration-none">Proofing and approvals</a></li>
|
||||
<li class="mb-2"><a href="#cover-and-metadata" class="text-decoration-none">Cover and metadata</a></li>
|
||||
<li class="mb-2"><a href="#what-acx-gets-right" class="text-decoration-none">What ACX gets right</a></li>
|
||||
<li class="mb-2"><a href="#what-acx-gets-wrong" class="text-decoration-none">What ACX gets wrong</a></li>
|
||||
<li><a href="#my-view-on-audiobooks" class="text-decoration-none">My view</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
Audiobooks can hugely expand a book’s reach, but they are a full production job, not a quick export button.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="Kdp" class="text-decoration-none">
|
||||
Publishing on KDP
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="IngramSpark" class="text-decoration-none">
|
||||
Publishing on IngramSpark
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="AuthorFinances" class="text-decoration-none">
|
||||
Author Finances
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="ingramSpark" class="btn btn-dark">
|
||||
Previous: Publishing on IngramSpark
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="ReviewsAndArcReaders" class="btn btn-dark">
|
||||
Next: Reviews and ARC Readers
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
394
CatherineLynwood/Views/IndieAuthor/AuthorFinances.cshtml
Normal file
394
CatherineLynwood/Views/IndieAuthor/AuthorFinances.cshtml
Normal file
@ -0,0 +1,394 @@
|
||||
@{
|
||||
ViewData["Title"] = "Author Finances";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Author Finances</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Author finances and the real cost of self-publishing</h1>
|
||||
<p class="lead mb-3">
|
||||
One of the biggest myths around self-publishing is that once your book is live, the money simply
|
||||
starts rolling in. It does not. Or at least, not for most people. The financial side of indie
|
||||
publishing is a mixture of costs, royalties, advertising spend, platform deductions, print
|
||||
margins, and the occasional unpleasant surprise.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This page looks at the financial reality behind independent publishing, including setup costs,
|
||||
royalties, print economics, advertising, and why building a catalogue usually matters far more
|
||||
than expecting a single book to carry the whole operation.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="the-basic-financial-picture" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">The basic financial picture</h2>
|
||||
<p>
|
||||
Self-publishing income is rarely a simple case of retail price minus profit. Every format
|
||||
comes with its own pricing model, platform deductions, and practical limitations.
|
||||
</p>
|
||||
<p>
|
||||
Depending on how you publish, the money coming in may be reduced by:
|
||||
</p>
|
||||
<ul>
|
||||
<li>printing costs</li>
|
||||
<li>platform commission</li>
|
||||
<li>wholesale discounts</li>
|
||||
<li>advertising spend</li>
|
||||
<li>production costs such as editing, cover design or audio</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
It is perfectly possible to sell books and still make very little actual profit, especially early on.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="upfront-costs" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Upfront costs</h2>
|
||||
<p>
|
||||
Before a book earns anything, it usually costs something. The exact amount varies wildly depending
|
||||
on how much you do yourself and how much you outsource.
|
||||
</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered align-middle">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Typical cost area</th>
|
||||
<th>Examples</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Editing</td>
|
||||
<td>Professional editing, proofreading, beta reading support</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cover design</td>
|
||||
<td>Designer fees, stock assets, software, image generation tools</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Formatting</td>
|
||||
<td>Interior layout tools, formatting services, proof copies</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ISBNs</td>
|
||||
<td>Purchasing and registering your own ISBNs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Audio production</td>
|
||||
<td>Narration, editing, mastering, platform preparation</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Marketing</td>
|
||||
<td>Amazon Ads, promotional graphics, giveaways, website costs</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p class="mb-0">
|
||||
Some authors keep these costs low by doing a lot themselves. Others invest heavily upfront.
|
||||
Neither approach guarantees success. It simply changes the risk profile.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="royalties-and-income-streams" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Royalties and income streams</h2>
|
||||
<p>
|
||||
Self-published authors often earn income from several different sources rather than one neat pot.
|
||||
</p>
|
||||
<p>
|
||||
Common income streams include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Kindle ebook sales</li>
|
||||
<li>Kindle Unlimited page reads</li>
|
||||
<li>paperback sales</li>
|
||||
<li>hardback sales</li>
|
||||
<li>audiobook sales</li>
|
||||
<li>direct sales, if you offer them</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Each of these may have very different margins, reporting delays, and patterns of performance.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="ebook-economics" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Ebook economics</h2>
|
||||
<p>
|
||||
Ebooks are often the cleanest financial model in self-publishing because there are no print costs.
|
||||
That does not mean every sale is highly profitable, but it does mean the margin is usually easier
|
||||
to understand than with print.
|
||||
</p>
|
||||
<p>
|
||||
Pricing still matters, though. Ebook royalties are shaped by the platform rules and the price band
|
||||
you choose. Price too low and you may struggle to earn enough. Price too high and readers may simply
|
||||
walk away.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Ebook pricing is not just about what feels fair to the author. It is about what the market will accept.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="print-economics" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Print economics</h2>
|
||||
<p>
|
||||
Print books are where many authors meet the cold wind of reality. Long books cost more to print,
|
||||
hardbacks cost more than paperbacks, and distribution discounts can eat into margins very quickly.
|
||||
</p>
|
||||
<p>
|
||||
For print books, the basic financial picture usually involves:
|
||||
</p>
|
||||
<ul>
|
||||
<li>retail price</li>
|
||||
<li>printing cost</li>
|
||||
<li>platform share or wholesale discount</li>
|
||||
<li>author margin</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
That is why a beautifully chunky hardback can feel emotionally satisfying while being financially
|
||||
far less exciting than outsiders imagine.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="ingram-and-wholesale" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">IngramSpark, wholesale discounts and margins</h2>
|
||||
<p>
|
||||
IngramSpark introduces a different kind of financial thinking because it is built around access
|
||||
to the wider book trade. That means wholesale discount becomes a key part of the model.
|
||||
</p>
|
||||
<p>
|
||||
Retailers need room to make their own margin, which means the publisher, in this case you,
|
||||
gives up part of the cover price before printing costs are even taken into account.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The result is that a book can look expensive to readers while still generating only a modest return
|
||||
for the author.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="returns-risk" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Returns risk</h2>
|
||||
<p>
|
||||
If you enable returns through IngramSpark, you are stepping into one of the weirder traditions of
|
||||
the book trade. Retailers can return unsold books, and the financial consequences come back to you.
|
||||
</p>
|
||||
<p>
|
||||
That means the wrong settings can create situations where distribution looks promising on paper but
|
||||
carries genuine financial exposure in practice.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Returns are one of those things every indie author should understand before casually clicking yes.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="advertising-costs" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Advertising costs</h2>
|
||||
<p>
|
||||
Advertising is usually one of the fastest-moving expenses in self-publishing. Unlike cover design
|
||||
or ISBNs, which are relatively fixed, ads can keep draining money every day if you let them.
|
||||
</p>
|
||||
<p>
|
||||
Common realities include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>clicks cost money whether or not readers buy</li>
|
||||
<li>one book often struggles to make PPC profitable</li>
|
||||
<li>catalogue depth can make ad spend more worthwhile</li>
|
||||
<li>poor conversion can quietly waste budget</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Advertising can help visibility, but it is not free momentum. It is paid exposure.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="the-portfolio-effect" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why a portfolio of books changes the maths</h2>
|
||||
<p>
|
||||
A single book has to recover its own costs by itself. That can be a hard road. Once you have multiple
|
||||
books, the picture changes.
|
||||
</p>
|
||||
<p>
|
||||
A reader acquired through one title might go on to:
|
||||
</p>
|
||||
<ul>
|
||||
<li>buy other books in the series</li>
|
||||
<li>try your backlist</li>
|
||||
<li>pick up other formats such as audio or hardback</li>
|
||||
<li>become a repeat reader over time</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
That is why many indie authors treat the first book less as a profit engine and more as the beginning
|
||||
of a catalogue.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="cash-flow-vs-profit" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Cash flow vs actual profit</h2>
|
||||
<p>
|
||||
Seeing royalty income arrive can feel encouraging, and rightly so, but income is not the same thing
|
||||
as profit. Properly understanding the finances means comparing money coming in with money already spent.
|
||||
</p>
|
||||
<p>
|
||||
That includes things like:
|
||||
</p>
|
||||
<ul>
|
||||
<li>software subscriptions</li>
|
||||
<li>proof copies</li>
|
||||
<li>cover and editing costs</li>
|
||||
<li>advertising spend</li>
|
||||
<li>website and hosting costs</li>
|
||||
<li>promotional materials</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
A book can have sales momentum and still be recovering its investment rather than genuinely “making money” yet.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="why-most-first-books-dont-profit" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why most first books do not make much money</h2>
|
||||
<p>
|
||||
This is not pessimism. It is just the boring old truth. Most first books do not generate huge profits.
|
||||
Some barely recover their direct costs at all.
|
||||
</p>
|
||||
<p>
|
||||
That usually comes down to a few simple reasons:
|
||||
</p>
|
||||
<ul>
|
||||
<li>the author has not yet built an audience</li>
|
||||
<li>there is no backlist to support read-through</li>
|
||||
<li>marketing is still being learned</li>
|
||||
<li>production costs land before meaningful sales do</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
This is why treating Book One as the foundation of something bigger often makes more sense than expecting
|
||||
immediate riches.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="showing-real-numbers" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Showing real numbers</h2>
|
||||
<p>
|
||||
One of the most useful things an author website can do is show approximate real figures rather than vague
|
||||
motivational waffle. That could include examples such as:
|
||||
</p>
|
||||
<ul>
|
||||
<li>print cost versus retail price</li>
|
||||
<li>royalty per paperback or hardback sale</li>
|
||||
<li>ebook royalty examples at different price points</li>
|
||||
<li>advertising spend versus attributed sales</li>
|
||||
<li>monthly or lifetime totals by format</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
This page could eventually become a live balance-sheet style section connected to backend data, which
|
||||
would make it far more useful than the average “you can do it” author advice page.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="my-view-on-author-finances" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view on author finances</h2>
|
||||
<p>
|
||||
I think the healthiest way to look at self-publishing finances is with honesty and patience. The first book
|
||||
may not make much money. It may not even break even for a while. That does not automatically mean it has failed.
|
||||
</p>
|
||||
<p>
|
||||
Sometimes the real value of a book is that it establishes your name, builds experience, attracts readers,
|
||||
and becomes part of a growing body of work. Financially, the long game usually matters more than the first
|
||||
little spike of sales.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The dream is not just to publish a book. It is to build something that can keep earning over time.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#the-basic-financial-picture" class="text-decoration-none">The basic financial picture</a></li>
|
||||
<li class="mb-2"><a href="#upfront-costs" class="text-decoration-none">Upfront costs</a></li>
|
||||
<li class="mb-2"><a href="#royalties-and-income-streams" class="text-decoration-none">Royalties and income streams</a></li>
|
||||
<li class="mb-2"><a href="#ebook-economics" class="text-decoration-none">Ebook economics</a></li>
|
||||
<li class="mb-2"><a href="#print-economics" class="text-decoration-none">Print economics</a></li>
|
||||
<li class="mb-2"><a href="#ingram-and-wholesale" class="text-decoration-none">Ingram and wholesale</a></li>
|
||||
<li class="mb-2"><a href="#returns-risk" class="text-decoration-none">Returns risk</a></li>
|
||||
<li class="mb-2"><a href="#advertising-costs" class="text-decoration-none">Advertising costs</a></li>
|
||||
<li class="mb-2"><a href="#the-portfolio-effect" class="text-decoration-none">Portfolio effect</a></li>
|
||||
<li class="mb-2"><a href="#cash-flow-vs-profit" class="text-decoration-none">Cash flow vs profit</a></li>
|
||||
<li class="mb-2"><a href="#why-most-first-books-dont-profit" class="text-decoration-none">Why first books struggle</a></li>
|
||||
<li class="mb-2"><a href="#showing-real-numbers" class="text-decoration-none">Showing real numbers</a></li>
|
||||
<li><a href="#my-view-on-author-finances" class="text-decoration-none">My view</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
Self-publishing income is real, but so are the costs. The financial picture usually makes far
|
||||
more sense once you have multiple books rather than one title doing all the heavy lifting.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="AmazonAdvertising" class="text-decoration-none">
|
||||
Amazon Advertising
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="IngramSpark" class="text-decoration-none">
|
||||
Publishing on IngramSpark
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="KdpVsIngramSpark" class="text-decoration-none">
|
||||
KDP vs IngramSpark
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="AmazonAdvertising" class="btn btn-dark">
|
||||
Previous: Amazon Advertising
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="AiForAuthors" class="btn btn-dark">
|
||||
Next: AI for Authors
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
356
CatherineLynwood/Views/IndieAuthor/CoverDesign.cshtml
Normal file
356
CatherineLynwood/Views/IndieAuthor/CoverDesign.cshtml
Normal file
@ -0,0 +1,356 @@
|
||||
@{
|
||||
ViewData["Title"] = "Cover Design";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Cover Design</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Cover design for indie authors</h1>
|
||||
<p class="lead mb-3">
|
||||
However much writers may wish otherwise, readers absolutely judge a book by its cover.
|
||||
The cover is not just decoration. It is packaging, branding, positioning and salesmanship
|
||||
all rolled into one. Before anyone reads the blurb, downloads a sample or listens to a chapter,
|
||||
the cover is already doing its work, or failing to.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This page looks at what makes a strong cover, the realities of designing one as an indie author,
|
||||
how AI can be useful as part of the creative process, and why getting the cover good enough to
|
||||
compete matters far more than indulging every artistic whim you happen to have that week.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="why-covers-matter" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why covers matter so much</h2>
|
||||
<p>
|
||||
A cover has one brutal job, to make the right reader stop scrolling.
|
||||
</p>
|
||||
<p>
|
||||
It needs to signal genre, tone and quality within seconds. A good cover helps a reader
|
||||
feel that the book belongs in the same world as other books they already enjoy. A weak
|
||||
cover creates hesitation, and hesitation kills clicks.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The painful truth is that even a brilliant story can be quietly sabotaged by a poor cover.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="what-a-cover-needs-to-do" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What a cover actually needs to do</h2>
|
||||
<p>
|
||||
A strong cover is not just about looking pretty. It needs to work as a piece of visual communication.
|
||||
</p>
|
||||
<p>
|
||||
At minimum, a cover should:
|
||||
</p>
|
||||
<ul>
|
||||
<li>look professional</li>
|
||||
<li>match the genre or market expectation</li>
|
||||
<li>remain clear at thumbnail size</li>
|
||||
<li>present the title and author name clearly</li>
|
||||
<li>create curiosity or emotional pull</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
If it fails at those things, it does not matter how meaningful the symbolism is to you personally.
|
||||
Readers are not standing in a gallery decoding your artistic soul. They are shopping.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="genre-signals" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Genre signals and reader expectations</h2>
|
||||
<p>
|
||||
Covers work partly because readers learn visual shorthand. Certain fonts, colour palettes,
|
||||
layouts and image styles immediately suggest thriller, romance, fantasy, historical fiction,
|
||||
literary fiction, and so on.
|
||||
</p>
|
||||
<p>
|
||||
That does not mean every cover must be identical, but it does mean a cover should not confuse
|
||||
the target audience. If your thriller looks like light women’s fiction, or your dark family
|
||||
drama looks like a cosy village mystery, you are making life harder for yourself.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
A cover should promise the right sort of reading experience before the reader even clicks.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="thumbnail-test" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">The thumbnail test</h2>
|
||||
<p>
|
||||
One of the most important tests for any modern cover is how it looks at a very small size.
|
||||
Most readers first encounter books as tiny rectangles on a screen, not as glorious full-size
|
||||
jackets under warm bookshop lighting. In many cases these thumbnails are also in black and white.
|
||||
Only recently have Amazon started to produce Colour Kindle. My very first cover looked great,
|
||||
right up to the point where you viewed it as black and white. At that point it merged into a
|
||||
mess of grey and greyer. Not pretty, and no use on a Kindle search.
|
||||
</p>
|
||||
<p>
|
||||
At thumbnail size, the cover should still:
|
||||
</p>
|
||||
<ul>
|
||||
<li>be readable enough to identify</li>
|
||||
<li>have a strong overall silhouette</li>
|
||||
<li>avoid looking muddy or cluttered</li>
|
||||
<li>hold together visually</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
If the design only works when viewed full screen at 200 percent, it is not really working where it matters.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="title-and-typography" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Title treatment and typography</h2>
|
||||
<p>
|
||||
Typography does a huge amount of heavy lifting on a cover. The font choice, size, spacing
|
||||
and position of the title can change the whole feel of the design.
|
||||
</p>
|
||||
<p>
|
||||
Common mistakes include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>fonts that do not suit the genre</li>
|
||||
<li>text that is too small</li>
|
||||
<li>poor contrast against the background</li>
|
||||
<li>too many different font styles fighting each other</li>
|
||||
<li>trying to be clever when simple would be stronger</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
If readers cannot quickly read the title, that is not mysterious. It is just annoying.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="doing-it-yourself" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Doing it yourself as an indie author</h2>
|
||||
<p>
|
||||
Many indie authors design their own covers, at least initially, either to save money or because
|
||||
they already have some design skills. That can work very well, but it comes with a trap.
|
||||
</p>
|
||||
<p>
|
||||
The trap is that authors are often too emotionally attached to the story to see the cover as a sales tool.
|
||||
They start designing for themselves rather than for the reader.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
If you design your own cover, you need to think like a marketer as well as a creator.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="working-with-a-designer" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Working with a designer</h2>
|
||||
<p>
|
||||
Hiring a professional cover designer can be a very smart investment, especially if design is not
|
||||
your strength or you want a result that competes immediately at a high level.
|
||||
</p>
|
||||
<p>
|
||||
A good designer can help with:
|
||||
</p>
|
||||
<ul>
|
||||
<li>genre positioning</li>
|
||||
<li>clean typography</li>
|
||||
<li>layout and hierarchy</li>
|
||||
<li>print-ready files</li>
|
||||
<li>consistency across a series or author brand</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
The trick is finding someone who understands the market for your type of book, not just someone
|
||||
who can make attractive pictures.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="using-ai-for-inspiration" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Using AI for inspiration</h2>
|
||||
<p>
|
||||
AI can be genuinely useful in the cover process, not necessarily as the final cover itself,
|
||||
but as a way of exploring mood, composition, character looks, setting ideas and visual possibilities.
|
||||
</p>
|
||||
<p>
|
||||
It can help authors:
|
||||
</p>
|
||||
<ul>
|
||||
<li>test visual ideas quickly</li>
|
||||
<li>clarify what they are trying to describe</li>
|
||||
<li>explore colour and atmosphere</li>
|
||||
<li>create reference material for later design work</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Used sensibly, AI is not replacing the cover design process. It is helping spark and refine ideas.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="ai-strengths-and-limits" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">The strengths and limits of AI-generated imagery</h2>
|
||||
<p>
|
||||
AI image tools can be brilliant for concept exploration, but they are not magical.
|
||||
They can produce striking visuals quickly, but they can also generate bizarre details,
|
||||
inconsistent anatomy, muddled typography, and compositions that collapse the moment
|
||||
you ask for something specific and technically precise.
|
||||
</p>
|
||||
<p>
|
||||
This makes them useful for inspiration, mockups and experimentation, but not automatically
|
||||
a replacement for proper design judgement.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
A cover still needs human taste, selection and refinement, otherwise you are just letting the machine
|
||||
throw visual spaghetti at the wall and hoping some of it looks expensive.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="print-vs-ebook-cover" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Ebook covers vs full print covers</h2>
|
||||
<p>
|
||||
It is worth remembering that an ebook cover and a full print cover are not the same thing.
|
||||
The front cover is only part of the package for print editions.
|
||||
</p>
|
||||
<p>
|
||||
Print preparation may also involve:
|
||||
</p>
|
||||
<ul>
|
||||
<li>spine width calculation</li>
|
||||
<li>back cover layout</li>
|
||||
<li>barcode placement</li>
|
||||
<li>bleed and trim setup</li>
|
||||
<li>colour profile considerations</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
A design that looks fine as a flat front cover still needs to survive the practical realities of print production.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="common-cover-mistakes" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Common cover mistakes</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>trying to cram too much onto the cover</li>
|
||||
<li>poor text contrast</li>
|
||||
<li>weak hierarchy between title and author name</li>
|
||||
<li>using imagery that does not match the book’s tone</li>
|
||||
<li>designing for personal symbolism instead of market impact</li>
|
||||
<li>forgetting how the cover looks at thumbnail size</li>
|
||||
<li>letting AI output dictate the design without proper editing</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="series-branding" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Series branding and consistency</h2>
|
||||
<p>
|
||||
If you are writing a series, cover consistency becomes even more important. Readers should be able
|
||||
to recognise related books at a glance.
|
||||
</p>
|
||||
<p>
|
||||
That does not mean every cover must be identical, but it should feel as though the books belong together.
|
||||
Consistency in fonts, layout, colour treatment or visual style helps create a recognisable brand.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
That is especially valuable online, where your books may appear next to one another on a retailer page.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="my-view-on-cover-design" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view on cover design</h2>
|
||||
<p>
|
||||
I think cover design is one of the areas where indie authors have to be especially honest with themselves.
|
||||
Writing a book does not automatically make someone a strong cover designer, in the same way owning a frying pan
|
||||
does not automatically make someone a chef.
|
||||
</p>
|
||||
<p>
|
||||
That does not mean authors should not be involved. Quite the opposite. But the goal should be to create a cover
|
||||
that works in the market, not simply one that feels emotionally satisfying in isolation.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The best cover is not the one that explains everything. It is the one that makes the right reader want to know more.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#why-covers-matter" class="text-decoration-none">Why covers matter</a></li>
|
||||
<li class="mb-2"><a href="#what-a-cover-needs-to-do" class="text-decoration-none">What a cover needs to do</a></li>
|
||||
<li class="mb-2"><a href="#genre-signals" class="text-decoration-none">Genre signals</a></li>
|
||||
<li class="mb-2"><a href="#thumbnail-test" class="text-decoration-none">The thumbnail test</a></li>
|
||||
<li class="mb-2"><a href="#title-and-typography" class="text-decoration-none">Title and typography</a></li>
|
||||
<li class="mb-2"><a href="#doing-it-yourself" class="text-decoration-none">Doing it yourself</a></li>
|
||||
<li class="mb-2"><a href="#working-with-a-designer" class="text-decoration-none">Working with a designer</a></li>
|
||||
<li class="mb-2"><a href="#using-ai-for-inspiration" class="text-decoration-none">Using AI for inspiration</a></li>
|
||||
<li class="mb-2"><a href="#ai-strengths-and-limits" class="text-decoration-none">AI strengths and limits</a></li>
|
||||
<li class="mb-2"><a href="#print-vs-ebook-cover" class="text-decoration-none">Ebook vs print cover</a></li>
|
||||
<li class="mb-2"><a href="#common-cover-mistakes" class="text-decoration-none">Common mistakes</a></li>
|
||||
<li class="mb-2"><a href="#series-branding" class="text-decoration-none">Series branding</a></li>
|
||||
<li><a href="#my-view-on-cover-design" class="text-decoration-none">My view</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
A cover is not just art. It is a sales tool. It needs to signal genre, look professional,
|
||||
and work at thumbnail size if it is going to do its job properly.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="AiForAuthors" class="text-decoration-none">
|
||||
AI for Authors
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="AmazonAdvertising" class="text-decoration-none">
|
||||
Amazon Advertising
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="TraditionalVsSelfPublishing" class="text-decoration-none">
|
||||
Traditional vs Self Publishing
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="EditingAndProofReading" class="btn btn-dark">
|
||||
Previous: Editing and Proofreading
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="KdpVsIngramSpark" class="btn btn-dark">
|
||||
Next: KDP vs IngramSpark
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
398
CatherineLynwood/Views/IndieAuthor/EditingAndProofreading.cshtml
Normal file
398
CatherineLynwood/Views/IndieAuthor/EditingAndProofreading.cshtml
Normal file
@ -0,0 +1,398 @@
|
||||
@{
|
||||
ViewData["Title"] = "Editing and Proofreading";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Editing and Proofreading</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Editing and proofreading as an indie author</h1>
|
||||
<p class="lead mb-3">
|
||||
Finishing a manuscript is not the same thing as finishing a book. In fact, for most authors,
|
||||
the first full draft is where the real work begins. Editing is where the story gets sharper,
|
||||
cleaner, more emotionally effective, and less likely to contain the same phrase three times
|
||||
in one paragraph like it has developed a nervous twitch.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This page looks at the difference between editing and proofreading, the stages involved,
|
||||
the value of reading work aloud, and how tools such as AI voice playback can help expose
|
||||
awkward phrasing, repetition, typos, pacing problems, and the sort of errors your eyes
|
||||
glide straight past because your brain thinks it already knows what the sentence says.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="why-editing-matters" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why editing matters</h2>
|
||||
<p>
|
||||
A strong idea can be weakened by clumsy delivery. A powerful scene can lose impact
|
||||
if it drags, repeats itself, or says too much. A good book is not usually written
|
||||
in one clean burst of genius. It is shaped.
|
||||
</p>
|
||||
<p>
|
||||
Editing is the stage where you begin turning a raw manuscript into something that
|
||||
feels intentional. It is where you spot structural problems, smooth out the prose,
|
||||
tighten the dialogue, strengthen weak transitions, and remove the bits that only made
|
||||
sense because you, the author, already knew what you meant.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
In other words, editing is not a chore stapled awkwardly onto writing. It is a huge
|
||||
part of writing.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="editing-vs-proofreading" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Editing vs proofreading</h2>
|
||||
<p>
|
||||
These terms often get lumped together, but they are not the same thing.
|
||||
</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered align-middle">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Stage</th>
|
||||
<th>Main focus</th>
|
||||
<th>Typical issues</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Editing</td>
|
||||
<td>Improving the writing itself</td>
|
||||
<td>Structure, pacing, repetition, clarity, tone, dialogue, scene order</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Proofreading</td>
|
||||
<td>Correcting final surface errors</td>
|
||||
<td>Typos, spelling, punctuation, formatting slips, missing words</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p class="mb-0">
|
||||
Put simply, editing changes the book for the better. Proofreading catches the little
|
||||
gremlins still running around after the heavy lifting is done.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="the-main-stages" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">The main stages of editing</h2>
|
||||
<p>
|
||||
Different authors work differently, but most manuscripts benefit from being tackled
|
||||
in layers rather than trying to fix absolutely everything at once.
|
||||
</p>
|
||||
<p>
|
||||
Typical stages include:
|
||||
</p>
|
||||
<ul>
|
||||
<li><strong>Structural editing</strong>, looking at plot, chapter order, pacing, character arcs and overall flow</li>
|
||||
<li><strong>Line editing</strong>, improving the wording, tone, rhythm and readability sentence by sentence</li>
|
||||
<li><strong>Copy editing</strong>, checking grammar, consistency, punctuation and technical accuracy</li>
|
||||
<li><strong>Proofreading</strong>, catching final typos and formatting errors before publication</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Trying to do all of that simultaneously is a lovely way to go half mad and still miss things.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="structural-editing" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Structural editing</h2>
|
||||
<p>
|
||||
Structural editing is the big-picture stage. This is where you look at whether the
|
||||
story itself works.
|
||||
</p>
|
||||
<p>
|
||||
Questions at this stage might include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Does the chapter order make sense?</li>
|
||||
<li>Does the middle sag?</li>
|
||||
<li>Are emotional beats landing properly?</li>
|
||||
<li>Is there repeated information the reader only needs once?</li>
|
||||
<li>Do character choices feel believable?</li>
|
||||
<li>Is anything missing that the story actually needs?</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
This is not the moment to fuss over commas while an entire subplot is limping along with one leg missing.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="line-editing" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Line editing and tightening the prose</h2>
|
||||
<p>
|
||||
Once the structure is sound, the line-by-line work becomes much more worthwhile.
|
||||
This is where you improve the actual reading experience.
|
||||
</p>
|
||||
<p>
|
||||
Line editing often involves:
|
||||
</p>
|
||||
<ul>
|
||||
<li>cutting repetition</li>
|
||||
<li>improving rhythm and flow</li>
|
||||
<li>removing clunky phrasing</li>
|
||||
<li>tightening dialogue</li>
|
||||
<li>making description more precise</li>
|
||||
<li>reducing over-explanation</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
This stage is where prose starts sounding less like a draft and more like a finished book.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="proofreading-stage" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Proofreading the final version</h2>
|
||||
<p>
|
||||
Proofreading comes late, once the major editing decisions are done. There is no point
|
||||
polishing sentences you are about to delete, nor lovingly correcting punctuation in a
|
||||
chapter that might get split in two next week.
|
||||
</p>
|
||||
<p>
|
||||
This final pass is about catching the stubborn leftovers:
|
||||
</p>
|
||||
<ul>
|
||||
<li>spelling mistakes</li>
|
||||
<li>missing or repeated words</li>
|
||||
<li>punctuation slips</li>
|
||||
<li>inconsistent capitalisation</li>
|
||||
<li>small formatting errors</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Proofreading is less glamorous than structural editing, but it is the stage that stops readers
|
||||
tripping over obvious errors and muttering darkly about standards.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="reading-aloud" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why reading aloud works so well</h2>
|
||||
<p>
|
||||
Reading text aloud, or hearing it read aloud, is one of the most effective editing tools
|
||||
there is. The ear catches things the eye happily skips.
|
||||
</p>
|
||||
<p>
|
||||
A sentence can look fine on the page and still sound awkward once spoken. Repetition becomes
|
||||
more obvious. Dialogue reveals whether it sounds natural or stilted. Overlong sentences stop
|
||||
pretending to be elegant and instead collapse wheezing into the furniture.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
If something sounds wrong, it often is wrong, even if you cannot immediately explain why.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="using-ai-voices" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Using AI voices to catch mistakes</h2>
|
||||
<p>
|
||||
One of the most useful modern editing methods is to use AI-generated voice playback
|
||||
to listen back to your chapters. It creates enough distance from the text that you begin
|
||||
hearing the words more like a reader would experience them.
|
||||
</p>
|
||||
<p>
|
||||
This can be brilliant for spotting:
|
||||
</p>
|
||||
<ul>
|
||||
<li>repeated phrases</li>
|
||||
<li>typos that the eye keeps missing</li>
|
||||
<li>unnatural dialogue</li>
|
||||
<li>rhythm problems</li>
|
||||
<li>accidental word duplication</li>
|
||||
<li>sentences that are technically correct but still sound wrong</li>
|
||||
</ul>
|
||||
<p>
|
||||
It is especially useful because your brain is far too willing to autocorrect your own work
|
||||
as you read it silently. Hearing the text externally cuts through that nonsense.
|
||||
</p>
|
||||
<p>
|
||||
I use a service called ElevenReader. It's by those clever ElevenLabs people. Now everyone has differing
|
||||
opinions about using AI, but hear me out... literally.
|
||||
</p>
|
||||
<audio controls class="w-100">
|
||||
<source src="~/audio/editing-and-proof-reading.mp3" type="audio/mpeg" />
|
||||
Your browser does not support the audio element.
|
||||
</audio>
|
||||
<p class="small">
|
||||
Read on or click the play button.
|
||||
</p>
|
||||
<p>
|
||||
When I write a chapter, and especially if it's a longer one I load it up into the ElevenReader app
|
||||
and listen to it back many times. It's like having a friend or family member read your work back to
|
||||
you, only they don't get fed up the 10th time you ask them.
|
||||
</p>
|
||||
<p>
|
||||
What I tend to do is listen to it with the manuscript in front of me. You'd be surprised at how many
|
||||
typos and misused words you include and would not see if you were purely editing the document alone.
|
||||
One of the mistakes I made in my first book was typing the word "form" instead of "from". I must have
|
||||
read that passage twenty times and never saw it, but as soon as I listened to it back, it stood out like
|
||||
a sore thumb.
|
||||
</p>
|
||||
<p>
|
||||
Repetition is another gotcha. I found I would use words like "amazing" far too often. I'd write them in
|
||||
dialogue and again, on the page it looked fine. But, oh my word, when you hear it back, you realise how
|
||||
awful it sounds. Seriously... try it. You'll thank me.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Used properly, AI voice playback is not replacing editing. It is giving you another angle of attack.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="common-things-to-watch-for" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Common things to watch for</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>repetition of words, ideas or emotional beats</li>
|
||||
<li>characters saying the same thing in slightly different ways</li>
|
||||
<li>scenes that start too early or end too late</li>
|
||||
<li>awkward transitions between chapters</li>
|
||||
<li>overwritten description</li>
|
||||
<li>dialogue that sounds written rather than spoken</li>
|
||||
<li>small continuity slips</li>
|
||||
<li>paragraphs that simply go on too long</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="beta-readers-and-feedback" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Beta readers and outside feedback</h2>
|
||||
<p>
|
||||
However carefully you edit, there comes a point where you are too close to the work.
|
||||
Fresh eyes matter.
|
||||
</p>
|
||||
<p>
|
||||
Beta readers can help identify:
|
||||
</p>
|
||||
<ul>
|
||||
<li>confusing sections</li>
|
||||
<li>slow chapters</li>
|
||||
<li>unconvincing character decisions</li>
|
||||
<li>plot points that need clearer setup</li>
|
||||
<li>moments that are emotionally stronger or weaker than you realised</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Not every piece of feedback should be obeyed like holy scripture, but patterns matter. If several people
|
||||
stumble over the same section, the section is probably the problem.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="editing-over-time" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why time helps</h2>
|
||||
<p>
|
||||
Distance improves editing. Leaving a manuscript alone for a while, even briefly, can make a huge difference.
|
||||
When you come back, you are more likely to notice what is actually on the page rather than what you remember writing.
|
||||
</p>
|
||||
<p>
|
||||
This is one reason long projects often improve through multiple passes spread over time. The more distance you gain,
|
||||
the less your brain protects the text from criticism.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Annoying, really, because it means patience helps and everyone wants the book finished yesterday.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="my-view-on-editing" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view on editing as an indie author</h2>
|
||||
<p>
|
||||
Editing is where a book earns its right to exist in public. Drafting creates the raw material,
|
||||
but editing is where that material becomes readable, controlled and deliberate.
|
||||
</p>
|
||||
<p>
|
||||
I think one of the most useful things an indie author can do is build a repeatable editing process.
|
||||
That might include silent reading, printed markup, AI voice playback, beta readers, and multiple passes
|
||||
focused on different problems. The exact method can vary, but the principle is the same... do not rely on one pass.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Your first draft is you telling yourself the story. Editing is you making it work for everyone else.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#why-editing-matters" class="text-decoration-none">Why editing matters</a></li>
|
||||
<li class="mb-2"><a href="#editing-vs-proofreading" class="text-decoration-none">Editing vs proofreading</a></li>
|
||||
<li class="mb-2"><a href="#the-main-stages" class="text-decoration-none">The main stages</a></li>
|
||||
<li class="mb-2"><a href="#structural-editing" class="text-decoration-none">Structural editing</a></li>
|
||||
<li class="mb-2"><a href="#line-editing" class="text-decoration-none">Line editing</a></li>
|
||||
<li class="mb-2"><a href="#proofreading-stage" class="text-decoration-none">Proofreading</a></li>
|
||||
<li class="mb-2"><a href="#reading-aloud" class="text-decoration-none">Reading aloud</a></li>
|
||||
<li class="mb-2"><a href="#using-ai-voices" class="text-decoration-none">Using AI voices</a></li>
|
||||
<li class="mb-2"><a href="#common-things-to-watch-for" class="text-decoration-none">Things to watch for</a></li>
|
||||
<li class="mb-2"><a href="#beta-readers-and-feedback" class="text-decoration-none">Beta readers</a></li>
|
||||
<li class="mb-2"><a href="#editing-over-time" class="text-decoration-none">Why time helps</a></li>
|
||||
<li><a href="#my-view-on-editing" class="text-decoration-none">My view</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
Editing improves the book. Proofreading cleans up what remains. Hearing the text aloud
|
||||
is one of the best ways to catch what your eyes miss.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="ReviewsAndArcReaders" class="text-decoration-none">
|
||||
Reviews and ARC Readers
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="AiForAuthors" class="text-decoration-none">
|
||||
AI for Authors
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="CoverDesign" class="text-decoration-none">
|
||||
Cover Design
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="ISBNs" class="btn btn-dark">
|
||||
Previous: ISBNs
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="CoverDesign" class="btn btn-dark">
|
||||
Next: Cover Design
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
229
CatherineLynwood/Views/IndieAuthor/Index.cshtml
Normal file
229
CatherineLynwood/Views/IndieAuthor/Index.cshtml
Normal file
@ -0,0 +1,229 @@
|
||||
@{
|
||||
ViewData["Title"] = "Indie Author and Self-Publishing Guide";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center mb-5">
|
||||
<div class="col-12 col-xl-10">
|
||||
<div class="bg-dark rounded-4 p-4 p-md-5 shadow-sm border">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Indie Author and Self-Publishing</h1>
|
||||
<p class="lead mb-3">
|
||||
Self-publishing gives writers more control than ever before, but it also means learning how
|
||||
the whole machine works... ISBNs, ebooks, print, audiobooks, pricing, advertising, reviews,
|
||||
cover design, metadata, and all the fiddly little details nobody warns you about.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This section of the site is a practical guide based on real experience. Not theory, not recycled
|
||||
fluff, and definitely not the fantasy that publishing one book will instantly turn life into a
|
||||
champagne-fuelled author empire. It is intended as a growing resource for writers who want to
|
||||
understand what self-publishing actually involves.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-center mb-4">
|
||||
<div class="col-12 col-xl-10">
|
||||
<div class="row g-4">
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Traditional vs Self-Publishing</h2>
|
||||
<p class="text-muted mb-4">
|
||||
A frank comparison of creative freedom, word count expectations, genre boundaries,
|
||||
timescales, control, and the trade-offs involved.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="TraditionalVsSelfPublishing" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">ISBNs</h2>
|
||||
<p class="text-muted mb-4">
|
||||
What ISBNs are, when you need them, how many to buy, what they cost, and how to
|
||||
complete the registrations properly.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="Isbns" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Editing and Proofreading</h2>
|
||||
<p class="text-muted mb-4">
|
||||
My editing process, including AI voices, listening back to chapters, catching
|
||||
repetition, awkward phrasing, typos, and structural problems.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="EditingAndProofreading" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Cover Design</h2>
|
||||
<p class="text-muted mb-4">
|
||||
Cover ideas, Photoshop, using AI for inspiration, what makes a strong cover, and why
|
||||
many authors end up doing jobs they never wanted.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="CoverDesign" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">KDP vs IngramSpark</h2>
|
||||
<p class="text-muted mb-4">
|
||||
The real-world differences between the two platforms, when to use one, when to use
|
||||
both, and how distribution actually works.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="KdpVsIngramSpark" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Publishing on KDP</h2>
|
||||
<p class="text-muted mb-4">
|
||||
Kindle publishing, KDP Select, Kindle Unlimited, royalties, setup screens, and what
|
||||
Amazon gets right... and wrong.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="Kdp" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Publishing on IngramSpark</h2>
|
||||
<p class="text-muted mb-4">
|
||||
Hardbacks, paperbacks, file preparation, proof approvals, pricing, wholesale discount,
|
||||
ecommerce links, and the ugly truth about returns.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="IngramSpark" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Audiobooks and ACX</h2>
|
||||
<p class="text-muted mb-4">
|
||||
Narrators, ACX, editing audio, chapter files, sound levels, proofing, and why audio
|
||||
production is its own beast.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="Audiobooks" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Reviews and ARC Readers</h2>
|
||||
<p class="text-muted mb-4">
|
||||
Why reviews matter, how difficult they can be to get, the idea behind ARC readers,
|
||||
and what actually happens in practice.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="ReviewsAndArcReaders" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Amazon Advertising</h2>
|
||||
<p class="text-muted mb-4">
|
||||
Pay per click, campaign types, wasted spend, realistic expectations, and why one book
|
||||
alone usually does not make advertising profitable.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="AmazonAdvertising" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Author Finances</h2>
|
||||
<p class="text-muted mb-4">
|
||||
Approximate costs, royalties, ad spend, profit margins, and the numbers behind indie
|
||||
publishing, with the option to expand this into live figures later.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="AuthorFinances" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4">
|
||||
<div class="card h-100 border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">AI for Authors</h2>
|
||||
<p class="text-muted mb-4">
|
||||
Using AI as a practical creative tool, from image inspiration to voice playback and
|
||||
idea testing, without handing over the actual writing.
|
||||
</p>
|
||||
<a asp-controller="IndieAuthor" asp-action="AiForAuthors" class="btn btn-outline-dark">
|
||||
Read more
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-center mt-5">
|
||||
<div class="col-12 col-xl-10">
|
||||
<div class="rounded-4 border p-4 p-md-5 bg-white text-black shadow-sm">
|
||||
<h2 class="h3 fw-bold mb-3">A realistic note before you begin</h2>
|
||||
<p class="mb-3">
|
||||
Self-publishing can be brilliant. It gives writers control, flexibility, speed, and the ability
|
||||
to build something entirely their own. But it also means wearing far too many hats, usually at
|
||||
the same time.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Writing the book is only one part of the job. You may also end up acting as editor, formatter,
|
||||
publisher, marketer, project manager, accountant, and reluctant amateur designer. That sounds a
|
||||
bit grim, but the upside is that you get to make the decisions... and keep learning as you go.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
296
CatherineLynwood/Views/IndieAuthor/IngramSpark.cshtml
Normal file
296
CatherineLynwood/Views/IndieAuthor/IngramSpark.cshtml
Normal file
@ -0,0 +1,296 @@
|
||||
@{
|
||||
ViewData["Title"] = "Publishing on IngramSpark";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Publishing on IngramSpark</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Publishing print books with IngramSpark</h1>
|
||||
<p class="lead mb-3">
|
||||
While Amazon KDP is often the easiest way to get a book onto Amazon, IngramSpark exists for a
|
||||
slightly different reason. It is designed to distribute books into the wider book trade,
|
||||
including bookshops, libraries and online retailers around the world.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
In theory, it is the bridge between independent authors and the traditional retail ecosystem.
|
||||
In practice, it introduces a few extra layers of complexity... pricing models, wholesale
|
||||
discounts, returns policies, and a print setup that needs a little more care than simply
|
||||
clicking “publish”.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="what-is-ingramspark" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What is IngramSpark?</h2>
|
||||
<p>
|
||||
IngramSpark is a publishing platform operated by <strong>Ingram</strong>, one of the
|
||||
largest book distributors in the world. It allows publishers and independent authors
|
||||
to upload print book files which can then be printed on demand and distributed through
|
||||
the global Ingram distribution network.
|
||||
</p>
|
||||
<p>
|
||||
That network includes:
|
||||
</p>
|
||||
<ul>
|
||||
<li>bookshops</li>
|
||||
<li>libraries</li>
|
||||
<li>online retailers</li>
|
||||
<li>wholesale distributors</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
In other words, it is designed to make your book visible beyond Amazon’s own ecosystem.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="why-authors-use-ingram" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why indie authors use IngramSpark</h2>
|
||||
<p>
|
||||
Many indie authors use IngramSpark alongside KDP rather than instead of it. Each
|
||||
platform does different things well.
|
||||
</p>
|
||||
<p>
|
||||
The main reasons authors choose IngramSpark include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>wider print distribution</li>
|
||||
<li>access to bookshops and libraries</li>
|
||||
<li>hardback publishing options</li>
|
||||
<li>global print-on-demand network</li>
|
||||
<li>professional publishing metadata systems</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
For authors building a long-term catalogue, it can be an important piece of the
|
||||
distribution puzzle.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="file-preparation" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Preparing your files</h2>
|
||||
<p>
|
||||
IngramSpark expects properly prepared print files. That usually means a
|
||||
professionally formatted interior PDF and a correctly sized cover PDF including
|
||||
spine width and bleed areas.
|
||||
</p>
|
||||
<p>
|
||||
Typical requirements include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>correct trim size</li>
|
||||
<li>proper margins and gutter</li>
|
||||
<li>embedded fonts</li>
|
||||
<li>high resolution images</li>
|
||||
<li>cover sized precisely for page count</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
It is not complicated once you understand it, but it does reward careful preparation.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="proof-copies" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Proof copies and approvals</h2>
|
||||
<p>
|
||||
Before the book goes live, you normally approve a proof copy. This allows you to
|
||||
check the printed version for layout errors, cover alignment, colour problems,
|
||||
and other surprises that only appear once ink hits paper.
|
||||
</p>
|
||||
<p>
|
||||
Things worth checking carefully include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>spine alignment</li>
|
||||
<li>cover colour balance</li>
|
||||
<li>page margins</li>
|
||||
<li>image quality</li>
|
||||
<li>typos that somehow survived editing</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Proofing properly can save a lot of embarrassment later.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="pricing-and-wholesale" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Pricing and wholesale discounts</h2>
|
||||
<p>
|
||||
This is where many new authors receive their first gentle introduction to the economics
|
||||
of book publishing.
|
||||
</p>
|
||||
<p>
|
||||
When publishing through IngramSpark you set:
|
||||
</p>
|
||||
<ul>
|
||||
<li>the retail price</li>
|
||||
<li>the wholesale discount offered to retailers</li>
|
||||
</ul>
|
||||
<p>
|
||||
Bookshops expect a discount so they can make their margin. That discount typically
|
||||
sits somewhere around the 40–55% range.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Once printing cost and discount are accounted for, the author’s share can be
|
||||
surprisingly modest.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="returns" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">The reality of book returns</h2>
|
||||
<p>
|
||||
Traditional book distribution includes the concept of <strong>returns</strong>.
|
||||
Retailers can send unsold books back to the distributor and receive a refund.
|
||||
</p>
|
||||
<p>
|
||||
With IngramSpark you can choose whether to allow returns, but enabling them carries
|
||||
financial risk. Returned books can be destroyed or shipped back to you, and the
|
||||
cost ultimately falls on the publisher.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
It is one of those slightly uncomfortable truths of the publishing industry that
|
||||
many cheerful “how to publish your book” guides prefer not to dwell on.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="distribution-network" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Distribution through the Ingram network</h2>
|
||||
<p>
|
||||
Once your book is active in the Ingram system, it becomes visible to thousands
|
||||
of retailers through the distribution catalogue used by the book trade.
|
||||
</p>
|
||||
<p>
|
||||
That does not mean bookshops will automatically stock it. It simply means they
|
||||
can order it through the same supply chain they already use.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Discoverability still depends heavily on marketing, reputation and demand.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="what-ingram-gets-right" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What IngramSpark gets right</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>global distribution network</li>
|
||||
<li>professional publishing infrastructure</li>
|
||||
<li>strong print quality</li>
|
||||
<li>hardback publishing options</li>
|
||||
<li>integration with the wider book trade</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="what-ingram-gets-wrong" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What IngramSpark gets wrong</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>setup is more complex than KDP</li>
|
||||
<li>pricing maths can be confusing for new authors</li>
|
||||
<li>returns policies carry risk</li>
|
||||
<li>support can sometimes feel distant</li>
|
||||
<li>distribution does not guarantee bookshop placement</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="my-view-on-ingram" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view on IngramSpark</h2>
|
||||
<p>
|
||||
IngramSpark is not the easiest publishing platform to learn, but it plays an
|
||||
important role if you want your book available through the wider retail
|
||||
ecosystem.
|
||||
</p>
|
||||
<p>
|
||||
For many indie authors the most practical approach is to use KDP for Amazon
|
||||
visibility while using IngramSpark for wider distribution and hardback
|
||||
editions.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Like most parts of self-publishing, it rewards patience and careful setup
|
||||
rather than rushing through the forms and hoping the universe sorts it out.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top:2rem">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#what-is-ingramspark">What is IngramSpark?</a></li>
|
||||
<li class="mb-2"><a href="#why-authors-use-ingram">Why authors use it</a></li>
|
||||
<li class="mb-2"><a href="#file-preparation">Preparing files</a></li>
|
||||
<li class="mb-2"><a href="#proof-copies">Proof copies</a></li>
|
||||
<li class="mb-2"><a href="#pricing-and-wholesale">Pricing and wholesale</a></li>
|
||||
<li class="mb-2"><a href="#returns">Returns</a></li>
|
||||
<li class="mb-2"><a href="#distribution-network">Distribution</a></li>
|
||||
<li class="mb-2"><a href="#what-ingram-gets-right">What it gets right</a></li>
|
||||
<li class="mb-2"><a href="#what-ingram-gets-wrong">What it gets wrong</a></li>
|
||||
<li><a href="#my-view-on-ingram">My view</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
IngramSpark is about distribution beyond Amazon, but it introduces
|
||||
wholesale pricing, returns, and a few economic realities.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="Kdp">Publishing on KDP</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="KdpVsIngramSpark">KDP vs IngramSpark</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="AuthorFinances">Author finances</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex justify-content-between">
|
||||
<a asp-controller="IndieAuthor" asp-action="Kdp" class="btn btn-dark">
|
||||
Previous: Publishing on KDP
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="Audiobooks" class="btn btn-dark">
|
||||
Next: Audiobooks and ACX
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
350
CatherineLynwood/Views/IndieAuthor/Isbns.cshtml
Normal file
350
CatherineLynwood/Views/IndieAuthor/Isbns.cshtml
Normal file
@ -0,0 +1,350 @@
|
||||
@{
|
||||
ViewData["Title"] = "ISBNs for Indie Authors";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">ISBNs</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">ISBNs, what they are and how indie authors use them</h1>
|
||||
<p class="lead mb-3">
|
||||
If you are publishing your own book, sooner or later you will come across ISBNs. They sound
|
||||
mysterious and important, which is because they are... but they are not nearly as complicated as
|
||||
some publishing guides make out.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This page explains what an ISBN actually is, when you need one, how many you may need for a single
|
||||
title, how registration works, and some of the practical realities indie authors run into when
|
||||
dealing with print, ebook and audiobook formats.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="what-is-an-isbn" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What is an ISBN?</h2>
|
||||
<p>
|
||||
ISBN stands for <strong>International Standard Book Number</strong>. In simple terms, it is a
|
||||
unique number used to identify a specific edition and format of a book.
|
||||
</p>
|
||||
<p>
|
||||
That last part matters. An ISBN is not just attached to the story itself. It is attached to
|
||||
a particular <strong>version</strong> of that book. So if you publish the same title in
|
||||
paperback, hardback and ebook, those are generally treated as separate products.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Think of it less like the identity of the novel and more like the identity of a specific
|
||||
published format of that novel.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="when-do-you-need-an-isbn" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">When do you need an ISBN?</h2>
|
||||
<p>
|
||||
In practice, you usually need an ISBN for printed editions such as paperbacks and hardbacks.
|
||||
Whether you need one for an ebook depends on the platform you are using and how much control
|
||||
you want over your publishing setup.
|
||||
</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered align-middle">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Format</th>
|
||||
<th>Usually needs its own ISBN?</th>
|
||||
<th>Notes</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Paperback</td>
|
||||
<td>Yes</td>
|
||||
<td>Normally requires its own ISBN.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hardback</td>
|
||||
<td>Yes</td>
|
||||
<td>Separate from the paperback edition.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Kindle ebook</td>
|
||||
<td>Not always</td>
|
||||
<td>Amazon can list Kindle books without you supplying your own ISBN.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>EPUB on other platforms</td>
|
||||
<td>Often yes</td>
|
||||
<td>Depends on distributor and how widely you are publishing.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Audiobook</td>
|
||||
<td>Sometimes</td>
|
||||
<td>Depends on the platform and distribution route.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p class="mb-0">
|
||||
The key thing is this: if you are releasing your book in more than one format, do not assume
|
||||
one ISBN covers the lot. It usually does not.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="how-many-isbns" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">How many ISBNs might one book need?</h2>
|
||||
<p>
|
||||
This catches a lot of new authors out. One title can easily use multiple ISBNs.
|
||||
</p>
|
||||
<p>
|
||||
For example, a single novel might need:
|
||||
</p>
|
||||
<ul>
|
||||
<li>one ISBN for the paperback</li>
|
||||
<li>one ISBN for the hardback</li>
|
||||
<li>one ISBN for a wide-distribution ebook edition</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
So even if you are only publishing one book, you may want more than one ISBN available from
|
||||
the start. Buy too few and you can end up going back for more sooner than expected, which is
|
||||
mildly annoying at best and a complete faff at worst.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="buying-isbns" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Buying ISBNs</h2>
|
||||
<p>
|
||||
In the UK, authors normally buy ISBNs from the official national ISBN agency. Other
|
||||
countries have their own agencies and systems.
|
||||
</p>
|
||||
<p>
|
||||
What matters most is buying them from the correct official source for your country, rather
|
||||
than from some random middleman trying to look useful while charging extra for the privilege.
|
||||
</p>
|
||||
<p>
|
||||
If you are planning more than one format, or more than one book, it often makes sense to buy
|
||||
a block rather than a single ISBN. That gives you flexibility later and avoids having to redo
|
||||
the whole mental calculation every time you add a new edition.
|
||||
</p>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered align-middle">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>1 Single ISBN</th>
|
||||
<th>Prefix for 10 ISBNs</th>
|
||||
<th>Prefix for 100 ISBNs</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>£93 per ISBN</td>
|
||||
<td>£174 per block of 10</td>
|
||||
<td>£387 per block of 100</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="mb-0">
|
||||
The prices above were correct at the time of publication, however you
|
||||
can find current pricing and order your ISBNs on the <a href="https://www.nielsenisbnstore.com/Home/Isbn" target="_blank">NielsenIQ BookData website</a>.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="registering-isbns" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Registering each ISBN properly</h2>
|
||||
<p>
|
||||
Buying an ISBN is only part of the job. You also need to register it correctly against the
|
||||
right book format and metadata.
|
||||
</p>
|
||||
<p>
|
||||
Although you can buy the ISBNs within seconds, it takes quite a lot longer to be able to
|
||||
actually register them. To do this you have to wait for an account to be set up on the
|
||||
<a href="https://www.nielsentitleeditor.com/titleeditor/" target="_blank">NelisenIQ Title Editor</a>.
|
||||
Now it appears that this account creation is performed manually, and takes approximately
|
||||
two weeks to come through, so you will need to keep this in mind. That said you do not need to do this
|
||||
part until you have your book files ready for submission to your chosen platforms.
|
||||
</p>
|
||||
<p>
|
||||
That normally includes details such as:
|
||||
</p>
|
||||
<ul>
|
||||
<li>title and subtitle</li>
|
||||
<li>author or pen name</li>
|
||||
<li>format and binding type</li>
|
||||
<li>publication date</li>
|
||||
<li>price</li>
|
||||
<li>publisher name or imprint</li>
|
||||
<li>the page count for the book</li>
|
||||
<li>the number of images, if any, and what type</li>
|
||||
<li>the physical dimensions of the book</li>
|
||||
</ul>
|
||||
<p>
|
||||
This is worth doing carefully. Metadata errors can create confusion later, especially once
|
||||
books begin appearing across retailers, databases and library systems.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
In other words, this is not the glamorous part of publishing, but it is absolutely one of
|
||||
the bits that benefits from getting it right first time. Don't worry if you do make a mistake though,
|
||||
you can edit this data once it's live on the system. obviously it's better to get it right first time.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="amazon-kdp-isbns" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Do Amazon and KDP give you an ISBN?</h2>
|
||||
<p>
|
||||
For some formats, Amazon can provide an identifier or allow publication without you using
|
||||
your own purchased ISBN. That can be convenient, especially when starting out as it's a free service.
|
||||
</p>
|
||||
<p>
|
||||
The trade-off is control. Using platform-provided identifiers can tie that edition more
|
||||
closely to the platform that issued it. If you want a cleaner, more independent publishing
|
||||
setup, owning your own ISBNs is often the better route.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Convenience is nice. Control is nicer. It just depends how seriously you are treating the
|
||||
book and how far you plan to take it.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="common-mistakes" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Common mistakes to avoid</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>Assuming one ISBN covers every format</li>
|
||||
<li>Buying too few and then needing more almost immediately</li>
|
||||
<li>Registering the wrong format against the wrong number</li>
|
||||
<li>Forgetting to keep a clear record of which ISBN belongs to which edition</li>
|
||||
<li>Treating metadata as an afterthought</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view as an indie author</h2>
|
||||
<p>
|
||||
ISBNs are one of those things that seem intimidating before you start, then turn out to be
|
||||
mostly admin once you understand the rules. They are not exciting, but they do matter.
|
||||
</p>
|
||||
<p>
|
||||
I chose to purchase a block of 10 ISBNs. You're almost certainly going to need more than one,
|
||||
however in heindsight I wish I'd bought a block of 100. If you're going to write more than 2 or 3
|
||||
books then it's the cheapest option over time.
|
||||
</p>
|
||||
<p>
|
||||
For my first book I used up 4 ISBNs:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
1 for the eBook. Initially I thought I would use multiple distribution platforms, so it
|
||||
made sense. However after a few months I settled on KDP and Kindle Select which gives you
|
||||
access to Kindle Unlimited
|
||||
</li>
|
||||
<li>
|
||||
1 for the Amazon KDP paperback. For my second book I'm not doing this due to the way Amazon
|
||||
groups editions of my book
|
||||
</li>
|
||||
<li>
|
||||
1 for my IngramSpark paperback, or what I call Bookshop Edition
|
||||
</li>
|
||||
<li>
|
||||
1 for my IngramSpark hardback, or what I call my Collector's Edition
|
||||
</li>
|
||||
<li>
|
||||
I didn't use one for the audiobook. I found out i didn't need to so I didn't
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
For indie authors, the real question is less “what is an ISBN?” and more “how many formats
|
||||
am I realistically going to publish, and how much control do I want over them?”
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Answer that properly and the ISBN decision becomes much simpler.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#what-is-an-isbn" class="text-decoration-none">What is an ISBN?</a></li>
|
||||
<li class="mb-2"><a href="#when-do-you-need-an-isbn" class="text-decoration-none">When do you need one?</a></li>
|
||||
<li class="mb-2"><a href="#how-many-isbns" class="text-decoration-none">How many might you need?</a></li>
|
||||
<li class="mb-2"><a href="#buying-isbns" class="text-decoration-none">Buying ISBNs</a></li>
|
||||
<li class="mb-2"><a href="#registering-isbns" class="text-decoration-none">Registering each one</a></li>
|
||||
<li class="mb-2"><a href="#amazon-kdp-isbns" class="text-decoration-none">Amazon and KDP</a></li>
|
||||
<li><a href="#common-mistakes" class="text-decoration-none">Common mistakes</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
One format usually means one ISBN. Paperback, hardback and ebook editions often
|
||||
need to be treated separately.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="Kdp" class="text-decoration-none">
|
||||
Publishing on KDP
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="IngramSpark" class="text-decoration-none">
|
||||
Publishing on IngramSpark
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="KdpVsIngramSpark" class="text-decoration-none">
|
||||
KDP vs IngramSpark
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="TraditionalVsSelfPublishing" class="btn btn-dark">
|
||||
Previous: Traditional vs Self-Publishing
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="EditingAndProofReading" class="btn btn-dark">
|
||||
Next: Editing and Proofreading
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
383
CatherineLynwood/Views/IndieAuthor/Kdp.cshtml
Normal file
383
CatherineLynwood/Views/IndieAuthor/Kdp.cshtml
Normal file
@ -0,0 +1,383 @@
|
||||
@{
|
||||
ViewData["Title"] = "Publishing on Amazon KDP";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Publishing on KDP</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Publishing on Amazon KDP</h1>
|
||||
<p class="lead mb-3">
|
||||
For many indie authors, Amazon KDP is the first real step into publishing. It is accessible,
|
||||
relatively quick to use, and gives authors a direct route to publishing ebooks and printed books
|
||||
without begging for permission from gatekeepers who think every novel on earth ought to be 80,000
|
||||
words and neatly shoved into one marketable box.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This page looks at what KDP is, how it works, what you can publish through it, the pros and cons
|
||||
of Kindle Unlimited, and some of the practical realities of dealing with setup screens, royalties,
|
||||
categories, keywords, and all the little details that make a difference.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="what-is-kdp" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What is KDP?</h2>
|
||||
<p>
|
||||
<strong>KDP</strong>, or <strong>Kindle Direct Publishing</strong>, is Amazon’s self-publishing
|
||||
platform. It allows authors and publishers to upload books directly to Amazon and sell them
|
||||
without going through a traditional publishing house.
|
||||
</p>
|
||||
<p>
|
||||
For indie authors, it is one of the easiest ways to get a book in front of readers. You can
|
||||
publish ebooks for Kindle, and you can also publish print editions such as paperbacks and,
|
||||
in some cases, hardbacks.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The big attraction is speed and control. You make the decisions, you upload the files, you
|
||||
set the pricing, and you retain far more ownership over the process than you ever would in
|
||||
traditional publishing.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="why-authors-use-kdp" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why authors use KDP</h2>
|
||||
<p>
|
||||
KDP is popular because it removes a lot of barriers. You do not need an agent, you do not
|
||||
need a publishing deal, and you do not need somebody in London to decide whether your book
|
||||
is currently fashionable enough for them to care.
|
||||
</p>
|
||||
<p>
|
||||
Some of the main reasons indie authors use KDP include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>easy access to the Amazon marketplace</li>
|
||||
<li>fast setup compared with traditional publishing</li>
|
||||
<li>control over pricing and metadata</li>
|
||||
<li>direct publishing of Kindle ebooks</li>
|
||||
<li>the option to create paperback editions</li>
|
||||
<li>built-in connection to Amazon sales pages and reviews</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
It is not perfect, but it is often the most obvious place to begin, especially if your goal
|
||||
is simply to get the book live and available to buy.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="what-you-can-publish" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What you can publish through KDP</h2>
|
||||
<p>
|
||||
KDP is most strongly associated with Kindle ebooks, but it can also handle certain print
|
||||
formats. That makes it useful for authors who want to keep ebook and print publishing under
|
||||
one roof, at least to begin with.
|
||||
</p>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered align-middle">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Format</th>
|
||||
<th>Supported by KDP?</th>
|
||||
<th>Notes</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Kindle ebook</td>
|
||||
<td>Yes</td>
|
||||
<td>The core KDP format and usually the easiest to publish.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Paperback</td>
|
||||
<td>Yes</td>
|
||||
<td>Print-on-demand through Amazon.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Hardback</td>
|
||||
<td>Sometimes</td>
|
||||
<td>Available in some setups, but many indie authors still prefer IngramSpark for hardbacks.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Audiobook</td>
|
||||
<td>No</td>
|
||||
<td>Audiobooks are handled separately, often through ACX rather than KDP itself.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p class="mb-0">
|
||||
In practice, many indie authors use KDP for ebooks and Amazon print visibility, then use
|
||||
other services for wider print distribution or audio.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="setting-up-a-book" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Setting up a book on KDP</h2>
|
||||
<p>
|
||||
KDP walks you through the setup in stages. On the surface, it all looks fairly simple:
|
||||
title, description, keywords, categories, manuscript upload, cover upload, price, done.
|
||||
In reality, each of those boxes has the power to help or quietly sabotage your book.
|
||||
</p>
|
||||
<p>
|
||||
A typical KDP setup includes:
|
||||
</p>
|
||||
<ul>
|
||||
<li>book title and subtitle</li>
|
||||
<li>series information, if relevant</li>
|
||||
<li>author name or pen name</li>
|
||||
<li>book description</li>
|
||||
<li>publishing rights confirmation</li>
|
||||
<li>keywords and categories</li>
|
||||
<li>age or audience information where needed</li>
|
||||
<li>manuscript upload</li>
|
||||
<li>cover upload or use of Amazon’s cover tools</li>
|
||||
<li>pricing and territory settings</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
None of this is especially difficult, but it does reward care. Sloppy metadata and rushed
|
||||
presentation make a book look amateur before anyone has even read page one.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="kindle-ebooks" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Kindle ebooks</h2>
|
||||
<p>
|
||||
For many authors, the ebook edition is the easiest place to start. It does not involve print
|
||||
costs, there is no physical proof copy to approve, and updating the file is generally less
|
||||
painful than with print.
|
||||
</p>
|
||||
<p>
|
||||
Kindle also gives you access to Amazon’s enormous customer base, which is obviously the bit
|
||||
everyone likes. The less glamorous bit is that it also means competing with approximately a
|
||||
million other books and a small mountain of algorithm-driven nonsense.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Still, ebooks are often the lowest-friction way to get a book selling online, and for many
|
||||
indie authors they remain the main entry point into the market.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="kindle-unlimited" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Kindle Unlimited and KDP Select</h2>
|
||||
<p>
|
||||
KDP Select is Amazon’s optional exclusivity programme for ebooks. If you enrol your Kindle
|
||||
book in it, that ebook generally has to remain exclusive to Amazon for the enrolment period.
|
||||
In return, the book can be included in <strong>Kindle Unlimited</strong>.
|
||||
</p>
|
||||
<p>
|
||||
Kindle Unlimited allows subscribers to read books from the programme as part of their
|
||||
membership. Authors are then paid based on pages read rather than only on direct purchases.
|
||||
</p>
|
||||
<p>
|
||||
That sounds lovely in theory. In practice, it depends heavily on the type of book, your
|
||||
audience, your pricing strategy, and whether being exclusive to Amazon suits your wider
|
||||
publishing plans.
|
||||
</p>
|
||||
<div class="card border-0 bg-light rounded-4 mt-4">
|
||||
<div class="card-body p-4">
|
||||
<h3 class="h5 fw-bold mb-3">Things to think about with Kindle Unlimited</h3>
|
||||
<ul class="mb-0">
|
||||
<li>You gain access to Kindle Unlimited readers</li>
|
||||
<li>You are usually giving Amazon ebook exclusivity for that period</li>
|
||||
<li>You may earn from page reads rather than only book sales</li>
|
||||
<li>It can help visibility for some genres more than others</li>
|
||||
<li>It may not suit authors who want their ebooks wide on multiple stores</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="paperbacks-and-print" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Paperbacks and print-on-demand</h2>
|
||||
<p>
|
||||
KDP can also handle paperback publishing through print-on-demand. That means copies are
|
||||
printed when ordered, rather than you having to buy and store a garage full of books like a
|
||||
literary greengrocer.
|
||||
</p>
|
||||
<p>
|
||||
This is incredibly useful for indie authors because it lowers the financial risk. You do not
|
||||
need a giant print run upfront. You simply upload the interior and cover files, choose the
|
||||
relevant trim and print settings, then approve the proofing stage.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Print-on-demand is one of the reasons self-publishing is even viable for so many authors now.
|
||||
The downside is that print cost and retail margin can squeeze profit pretty hard, especially
|
||||
on long books.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="keywords-categories-and-metadata" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Keywords, categories and metadata</h2>
|
||||
<p>
|
||||
This is one of the least exciting but most important parts of KDP. Your book description,
|
||||
categories, keywords, subtitle, and general metadata all affect how discoverable the book is
|
||||
and how accurately Amazon understands what it is.
|
||||
</p>
|
||||
<p>
|
||||
If you pick lazy categories or vague keywords, you make life harder for yourself. The same
|
||||
goes for weak descriptions. You can write a brilliant novel and still trip over your own
|
||||
shoelaces at the metadata stage.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Good metadata will not magically sell a bad book, but bad metadata can absolutely bury a
|
||||
good one.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="royalties-and-pricing" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Royalties and pricing</h2>
|
||||
<p>
|
||||
One of the first things new authors notice on KDP is that pricing is tied closely to royalty
|
||||
structures. In ebooks especially, price can affect which royalty option applies. Print books
|
||||
then add printing cost on top, which can make the maths much less glamorous than people hope.
|
||||
</p>
|
||||
<p>
|
||||
The important thing is not to price purely based on ego. Your book may well deserve to be
|
||||
treated like a masterpiece, but readers still compare it with everything else on the store.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Pricing is part positioning, part experiment, and part cold acceptance that profit per book
|
||||
is often thinner than outsiders imagine.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="what-kdp-gets-right" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What KDP gets right</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>It is easy to access and reasonably straightforward to use</li>
|
||||
<li>It gets books onto Amazon quickly</li>
|
||||
<li>It supports both ebook and print workflows</li>
|
||||
<li>It gives indie authors direct control over publishing decisions</li>
|
||||
<li>It lowers the barrier to entry dramatically</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="what-kdp-gets-wrong" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What KDP gets wrong</h2>
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>It encourages dependence on a single giant retailer</li>
|
||||
<li>Its systems can feel rigid or opaque in places</li>
|
||||
<li>Metadata and category control is not always as flexible as authors would like</li>
|
||||
<li>Kindle Unlimited exclusivity can be limiting</li>
|
||||
<li>It can make publishing look easier than marketing actually is</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="my-view-on-kdp" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view on KDP as an indie author</h2>
|
||||
<p>
|
||||
KDP is a very useful tool. It is not a magic wand, not a publishing strategy by itself, and
|
||||
definitely not a guarantee of sales. But it is one of the most practical ways for an indie
|
||||
author to get a book into the world.
|
||||
</p>
|
||||
<p>
|
||||
The real danger is assuming that uploading the book is the finish line. It is not. It is the
|
||||
start of the next phase, which involves presentation, discoverability, reviews, pricing,
|
||||
advertising, and slowly building a catalogue that gives readers somewhere else to go if they
|
||||
like your work.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
In other words, KDP can publish your book. It cannot build your career for you. Bit rude of
|
||||
it really.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#what-is-kdp" class="text-decoration-none">What is KDP?</a></li>
|
||||
<li class="mb-2"><a href="#why-authors-use-kdp" class="text-decoration-none">Why authors use it</a></li>
|
||||
<li class="mb-2"><a href="#what-you-can-publish" class="text-decoration-none">What you can publish</a></li>
|
||||
<li class="mb-2"><a href="#setting-up-a-book" class="text-decoration-none">Setting up a book</a></li>
|
||||
<li class="mb-2"><a href="#kindle-ebooks" class="text-decoration-none">Kindle ebooks</a></li>
|
||||
<li class="mb-2"><a href="#kindle-unlimited" class="text-decoration-none">Kindle Unlimited</a></li>
|
||||
<li class="mb-2"><a href="#paperbacks-and-print" class="text-decoration-none">Paperbacks and print</a></li>
|
||||
<li class="mb-2"><a href="#keywords-categories-and-metadata" class="text-decoration-none">Metadata</a></li>
|
||||
<li class="mb-2"><a href="#royalties-and-pricing" class="text-decoration-none">Royalties and pricing</a></li>
|
||||
<li class="mb-2"><a href="#what-kdp-gets-right" class="text-decoration-none">What KDP gets right</a></li>
|
||||
<li class="mb-2"><a href="#what-kdp-gets-wrong" class="text-decoration-none">What KDP gets wrong</a></li>
|
||||
<li><a href="#my-view-on-kdp" class="text-decoration-none">My view</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
KDP is one of the easiest ways for indie authors to publish ebooks and print books,
|
||||
but getting listed is only the beginning. Visibility is the real battle.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="Isbns" class="text-decoration-none">
|
||||
ISBNs
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="IngramSpark" class="text-decoration-none">
|
||||
Publishing on IngramSpark
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="KdpVsIngramSpark" class="text-decoration-none">
|
||||
KDP vs IngramSpark
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="KdpVsIngramSpark" class="btn btn-dark">
|
||||
Previous: KDP vs IngramSpark
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="IngramSpark" class="btn btn-dark">
|
||||
Next: Publishing on IngramSpark
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
377
CatherineLynwood/Views/IndieAuthor/KdpVsIngramSpark.cshtml
Normal file
377
CatherineLynwood/Views/IndieAuthor/KdpVsIngramSpark.cshtml
Normal file
@ -0,0 +1,377 @@
|
||||
@{
|
||||
ViewData["Title"] = "KDP vs IngramSpark";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">KDP vs IngramSpark</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">KDP vs IngramSpark</h1>
|
||||
|
||||
<p class="lead mb-3">
|
||||
One of the most common questions new indie authors ask is whether they should publish their print
|
||||
books through Amazon KDP or through IngramSpark.
|
||||
</p>
|
||||
|
||||
<p class="mb-0">
|
||||
The honest answer is that they serve slightly different purposes. Many independent authors
|
||||
eventually end up using both platforms together, each handling the parts of publishing they
|
||||
do best.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
|
||||
<div class="row g-4">
|
||||
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="the-short-answer" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">The short answer</h2>
|
||||
|
||||
<p>
|
||||
If your primary goal is selling books on Amazon, KDP is usually the easiest and most
|
||||
straightforward route.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you want your book available through bookshops, libraries and the wider book trade,
|
||||
IngramSpark provides access to the global distribution network used by retailers.
|
||||
</p>
|
||||
|
||||
<p class="mb-0">
|
||||
For many authors the practical solution is to combine the two.
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<section id="side-by-side-comparison" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Side-by-side comparison</h2>
|
||||
|
||||
<div class="table-responsive">
|
||||
|
||||
<table class="table table-bordered align-middle">
|
||||
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Feature</th>
|
||||
<th>KDP</th>
|
||||
<th>IngramSpark</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<td>Primary purpose</td>
|
||||
<td>Amazon publishing platform</td>
|
||||
<td>Global book distribution network</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Ebooks</td>
|
||||
<td>Excellent Kindle support</td>
|
||||
<td>Not its main focus</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Paperbacks</td>
|
||||
<td>Simple print-on-demand</td>
|
||||
<td>Professional trade distribution</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Hardbacks</td>
|
||||
<td>Available in some cases</td>
|
||||
<td>Strong support for hardback formats</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Distribution</td>
|
||||
<td>Primarily Amazon</td>
|
||||
<td>Bookshops, libraries, retailers worldwide</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Setup complexity</td>
|
||||
<td>Very straightforward</td>
|
||||
<td>More detailed setup</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Wholesale discount</td>
|
||||
<td>Not required</td>
|
||||
<td>Required for trade distribution</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Returns system</td>
|
||||
<td>No traditional return system</td>
|
||||
<td>Retail returns possible</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Best for</td>
|
||||
<td>Amazon-focused publishing</td>
|
||||
<td>Trade distribution and hardbacks</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<section id="when-kdp-makes-sense" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">When KDP makes the most sense</h2>
|
||||
|
||||
<p>
|
||||
For many indie authors, KDP is the simplest way to get started.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>you want fast publishing</li>
|
||||
<li>Amazon is your main sales channel</li>
|
||||
<li>you want simple setup</li>
|
||||
<li>you want Kindle ebook support</li>
|
||||
<li>you prefer minimal distribution complexity</li>
|
||||
</ul>
|
||||
|
||||
<p class="mb-0">
|
||||
It removes a lot of friction from the publishing process and allows authors to focus on writing,
|
||||
presentation and marketing.
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<section id="when-ingram-makes-sense" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">When IngramSpark makes sense</h2>
|
||||
|
||||
<p>
|
||||
IngramSpark becomes valuable when authors want access to the wider book trade.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>bookshop availability</li>
|
||||
<li>library distribution</li>
|
||||
<li>global retail catalogues</li>
|
||||
<li>hardback editions</li>
|
||||
<li>wider publishing infrastructure</li>
|
||||
</ul>
|
||||
|
||||
<p class="mb-0">
|
||||
It is particularly useful for authors building a catalogue or publishing imprint rather than
|
||||
simply uploading a single book.
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<section id="using-both-platforms" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Using both platforms together</h2>
|
||||
|
||||
<p>
|
||||
A common strategy among indie authors is to combine both services.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Typical setups look something like this:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>KDP for Kindle ebooks</li>
|
||||
<li>KDP for Amazon print visibility</li>
|
||||
<li>IngramSpark for wider distribution</li>
|
||||
<li>IngramSpark for hardback editions</li>
|
||||
</ul>
|
||||
|
||||
<p class="mb-0">
|
||||
Each platform then handles the parts it is best at rather than forcing one system to do everything.
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<section id="the-bookshop-myth" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">The bookshop myth</h2>
|
||||
|
||||
<p>
|
||||
Many authors assume that once a book is listed in the Ingram distribution network, bookshops
|
||||
will automatically stock it.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Unfortunately that is not how it works.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Bookshops stock books they believe will sell. Being available through Ingram simply means the
|
||||
book can be ordered through their normal supply chain. It does not guarantee shelf space.
|
||||
</p>
|
||||
|
||||
<p class="mb-0">
|
||||
Distribution creates opportunity. It does not create demand.
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<section id="the-financial-reality" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">The financial reality</h2>
|
||||
|
||||
<p>
|
||||
Both platforms involve economic trade-offs.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>KDP print margins are often modest</li>
|
||||
<li>IngramSpark requires wholesale discounts</li>
|
||||
<li>print cost increases with book length</li>
|
||||
<li>returns policies can introduce risk</li>
|
||||
</ul>
|
||||
|
||||
<p class="mb-0">
|
||||
Understanding the numbers is an important part of publishing decisions.
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
<section id="my-view" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My view as an indie author</h2>
|
||||
|
||||
<p>
|
||||
KDP and IngramSpark are not really competing services. They are different tools
|
||||
within the same publishing toolbox.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
KDP is excellent for fast publishing and Amazon visibility.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
IngramSpark is valuable for broader distribution and professional publishing
|
||||
infrastructure.
|
||||
</p>
|
||||
|
||||
<p class="mb-0">
|
||||
Using both together often provides the most flexibility for indie authors building
|
||||
a long-term catalogue.
|
||||
</p>
|
||||
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-lg-4">
|
||||
|
||||
<div class="sticky-lg-top" style="top:2rem">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
|
||||
<ul class="list-unstyled small mb-0">
|
||||
|
||||
<li class="mb-2"><a href="#the-short-answer">The short answer</a></li>
|
||||
<li class="mb-2"><a href="#side-by-side-comparison">Comparison table</a></li>
|
||||
<li class="mb-2"><a href="#when-kdp-makes-sense">When KDP makes sense</a></li>
|
||||
<li class="mb-2"><a href="#when-ingram-makes-sense">When IngramSpark makes sense</a></li>
|
||||
<li class="mb-2"><a href="#using-both-platforms">Using both platforms</a></li>
|
||||
<li class="mb-2"><a href="#the-bookshop-myth">The bookshop myth</a></li>
|
||||
<li class="mb-2"><a href="#the-financial-reality">Financial reality</a></li>
|
||||
<li><a href="#my-view">My view</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
|
||||
<p class="small mb-0">
|
||||
KDP is ideal for Amazon publishing. IngramSpark extends your reach into
|
||||
the wider book trade. Many authors use both.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
|
||||
<ul class="list-unstyled small mb-0">
|
||||
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="Kdp">
|
||||
Publishing on KDP
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="IngramSpark">
|
||||
Publishing on IngramSpark
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="AuthorFinances">
|
||||
Author finances
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
|
||||
<div class="d-flex justify-content-between">
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="CoverDesign" class="btn btn-dark">
|
||||
Previous: Cover Design
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="Kdp" class="btn btn-dark">
|
||||
Next: Publishing on KDP
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
275
CatherineLynwood/Views/IndieAuthor/ReviewsAndArcReaders.cshtml
Normal file
275
CatherineLynwood/Views/IndieAuthor/ReviewsAndArcReaders.cshtml
Normal file
@ -0,0 +1,275 @@
|
||||
@{
|
||||
ViewData["Title"] = "Reviews and ARC Readers";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Reviews and ARC Readers</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Reviews and ARC readers</h1>
|
||||
<p class="lead mb-3">
|
||||
Reviews are one of the most important pieces of social proof on Amazon and other book retailers.
|
||||
When a reader lands on your book page, they often glance at the rating and number of reviews
|
||||
before they even read the blurb.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Unfortunately, getting reviews is not easy. Even readers who genuinely enjoyed your book often
|
||||
forget to leave one. This page looks at why reviews matter, what ARC readers are, and some of
|
||||
the realities indie authors face when trying to build early feedback for their work.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="why-reviews-matter" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why reviews matter</h2>
|
||||
<p>
|
||||
Reviews serve two main purposes. First, they help potential readers decide whether the
|
||||
book is worth their time and money. Second, they feed into the algorithms that determine
|
||||
how visible a book becomes on retail platforms like Amazon.
|
||||
</p>
|
||||
<p>
|
||||
A book with no reviews often looks risky to a new reader. A book with a handful of
|
||||
thoughtful reviews feels safer. Once a book gathers more reviews, it begins to look
|
||||
established.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
That perception matters a lot more than authors sometimes realise.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="how-readers-use-reviews" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">How readers actually use reviews</h2>
|
||||
<p>
|
||||
Most readers don’t analyse reviews in great detail. Instead they tend to scan quickly.
|
||||
</p>
|
||||
<ul>
|
||||
<li>They glance at the star rating</li>
|
||||
<li>They check roughly how many reviews there are</li>
|
||||
<li>They skim one or two short comments</li>
|
||||
<li>They look for signs the book fits their taste</li>
|
||||
</ul>
|
||||
<p>
|
||||
Reviews therefore work as a form of reassurance. Even a short comment like
|
||||
“I really enjoyed this story” can help signal that the book has already been read
|
||||
and appreciated by someone else.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
A completely empty review section, on the other hand, can make a book feel invisible.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="what-arc-readers-are" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">What ARC readers are</h2>
|
||||
<p>
|
||||
ARC stands for <strong>Advance Review Copy</strong>. These are early copies of a book
|
||||
given to readers before publication in the hope they will leave honest reviews once
|
||||
the book is released.
|
||||
</p>
|
||||
<p>
|
||||
ARC readers might receive:
|
||||
</p>
|
||||
<ul>
|
||||
<li>a digital manuscript</li>
|
||||
<li>a pre-release ebook</li>
|
||||
<li>a printed proof copy</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
The idea is simple. Early readers help seed the review section so the book does not
|
||||
launch into the world looking completely empty.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="finding-arc-readers" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Finding ARC readers</h2>
|
||||
<p>
|
||||
In theory this sounds straightforward. In practice it can be surprisingly difficult.
|
||||
</p>
|
||||
<p>
|
||||
Many authors try to recruit ARC readers from:
|
||||
</p>
|
||||
<ul>
|
||||
<li>mailing lists</li>
|
||||
<li>social media followers</li>
|
||||
<li>reader communities</li>
|
||||
<li>genre-specific groups</li>
|
||||
<li>friends and early supporters</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
Even then, not everyone who accepts an ARC will actually leave a review. Some readers
|
||||
simply forget, get busy, or never quite finish the book.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="managing-expectations" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Managing expectations</h2>
|
||||
<p>
|
||||
One of the realities indie authors eventually learn is that only a small percentage
|
||||
of readers leave reviews.
|
||||
</p>
|
||||
<p>
|
||||
Even enthusiastic readers often finish a book, close the app, and move on with their
|
||||
day. Writing a review takes time and effort, and many readers simply don’t think to do it.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
This means that a modest number of reviews does not necessarily reflect a lack of
|
||||
readership. It often just reflects normal human behaviour.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="honest-reviews" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Why honest reviews matter</h2>
|
||||
<p>
|
||||
ARC readers should always be encouraged to leave honest reviews rather than positive
|
||||
ones. The purpose is not to manufacture praise but to give readers genuine feedback
|
||||
from people who have read the book.
|
||||
</p>
|
||||
<p>
|
||||
Honest reviews build credibility. If every review sounds suspiciously identical or
|
||||
overly enthusiastic, readers may become sceptical.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
A mix of reactions is normal and healthy.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="amazon-rules" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Amazon review rules</h2>
|
||||
<p>
|
||||
Amazon has strict policies around reviews. Authors should avoid anything that could
|
||||
be interpreted as manipulating the review system.
|
||||
</p>
|
||||
<p>
|
||||
Examples of things to avoid include:
|
||||
</p>
|
||||
<ul>
|
||||
<li>paying for positive reviews</li>
|
||||
<li>review swaps between authors</li>
|
||||
<li>asking friends or family to leave reviews without disclosure</li>
|
||||
<li>offering rewards for favourable reviews</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
The safest approach is simply to ask readers to leave an honest review if they enjoyed
|
||||
the book.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="how-to-encourage-reviews" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Encouraging readers to leave reviews</h2>
|
||||
<p>
|
||||
While you cannot force readers to leave reviews, you can make it easier for them.
|
||||
</p>
|
||||
<ul>
|
||||
<li>Include a short request at the end of the book</li>
|
||||
<li>Thank readers for their support</li>
|
||||
<li>Provide a simple reminder that reviews help authors</li>
|
||||
<li>Keep the request brief and polite</li>
|
||||
</ul>
|
||||
<p class="mb-0">
|
||||
A gentle reminder is often enough to nudge a few readers into leaving feedback.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="my-experience-with-reviews" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My experience with reviews</h2>
|
||||
<p>
|
||||
In my own experience, gathering reviews can be slower than you expect. Even when readers
|
||||
say they enjoyed the book, that doesn’t always translate into a written review on the
|
||||
retailer page.
|
||||
</p>
|
||||
<p>
|
||||
That can feel frustrating, but it’s part of the normal rhythm of publishing. Reviews
|
||||
tend to accumulate gradually over time rather than appearing all at once.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
The best approach is to focus on writing the next book while the reviews slowly build
|
||||
in the background.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#why-reviews-matter" class="text-decoration-none">Why reviews matter</a></li>
|
||||
<li class="mb-2"><a href="#how-readers-use-reviews" class="text-decoration-none">How readers use reviews</a></li>
|
||||
<li class="mb-2"><a href="#what-arc-readers-are" class="text-decoration-none">What ARC readers are</a></li>
|
||||
<li class="mb-2"><a href="#finding-arc-readers" class="text-decoration-none">Finding ARC readers</a></li>
|
||||
<li class="mb-2"><a href="#managing-expectations" class="text-decoration-none">Managing expectations</a></li>
|
||||
<li class="mb-2"><a href="#honest-reviews" class="text-decoration-none">Honest reviews</a></li>
|
||||
<li class="mb-2"><a href="#amazon-rules" class="text-decoration-none">Amazon rules</a></li>
|
||||
<li class="mb-2"><a href="#how-to-encourage-reviews" class="text-decoration-none">Encouraging reviews</a></li>
|
||||
<li><a href="#my-experience-with-reviews" class="text-decoration-none">My experience</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
Reviews build trust with readers and improve visibility, but they usually
|
||||
accumulate slowly. Even enthusiastic readers often forget to leave them.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="AmazonAdvertising" class="text-decoration-none">
|
||||
Amazon Advertising
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="EditingAndProofreading" class="text-decoration-none">
|
||||
Editing and Proofreading
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="Index" class="text-decoration-none">
|
||||
Guide Index
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="Audiobooks" class="btn btn-dark">
|
||||
Previous: Audiobooks and ACX
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="AmazonAdvertising" class="btn btn-dark">
|
||||
Next: Amazon Advertising
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,310 @@
|
||||
@{
|
||||
ViewData["Title"] = "Traditional Publishing vs Self Publishing";
|
||||
}
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-xl-10">
|
||||
|
||||
<nav aria-label="breadcrumb" class="mb-4">
|
||||
<ol class="breadcrumb small">
|
||||
<li class="breadcrumb-item">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index">Indie Author Guide</a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Traditional vs Self Publishing</li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<header class="mb-5">
|
||||
<span class="badge text-bg-dark mb-3">Indie Author Guide</span>
|
||||
<h1 class="display-5 fw-bold mb-3">Traditional publishing vs self publishing</h1>
|
||||
<p class="lead mb-3">
|
||||
For decades traditional publishing was the only realistic route into the book industry.
|
||||
Authors would submit manuscripts to literary agents, agents would approach publishers,
|
||||
and if everything aligned the book might eventually appear in print.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Today things are very different. Platforms like Amazon KDP and IngramSpark allow authors
|
||||
to publish their work directly. That doesn’t make one path automatically better than the
|
||||
other. Each route has advantages, disadvantages, and trade-offs that authors need to
|
||||
understand before deciding which direction suits them.
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-8">
|
||||
|
||||
<section id="traditional-publishing-overview" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">How traditional publishing works</h2>
|
||||
<p>
|
||||
Traditional publishing usually involves several stages before a book ever reaches
|
||||
readers. The author submits their manuscript to literary agents. If an agent
|
||||
believes the work has commercial potential they may agree to represent the author.
|
||||
</p>
|
||||
<p>
|
||||
The agent then approaches publishing houses in the hope that one of them will
|
||||
acquire the book. If accepted, the publisher typically handles editing, cover
|
||||
design, printing, and distribution.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
In return, the author receives a royalty on sales and often gives the publisher
|
||||
certain rights to the work for a period of time.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="traditional-pros" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Advantages of traditional publishing</h2>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>Professional editorial support</li>
|
||||
<li>Established distribution networks</li>
|
||||
<li>Access to physical bookshops</li>
|
||||
<li>Marketing support from the publisher</li>
|
||||
<li>Industry recognition and credibility</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="mt-3 mb-0">
|
||||
For some authors, particularly those seeking large commercial exposure or literary
|
||||
recognition, these advantages can be significant.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="traditional-cons" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Challenges with traditional publishing</h2>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>Very competitive submission process</li>
|
||||
<li>Long timelines before publication</li>
|
||||
<li>Less control over the final product</li>
|
||||
<li>Lower royalty percentages</li>
|
||||
<li>Pressure to fit established genre expectations</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="mt-3 mb-0">
|
||||
The submission process alone can take months or even years, and many manuscripts
|
||||
never reach publication through this route. It's not unheard of for it to take two
|
||||
years or more for your work to get published.
|
||||
</p>
|
||||
<p class="mt-3 mb-0">
|
||||
Additionally don't think that if you do manage to get traditionally published you'll
|
||||
then get to sit back and enjoy the ride. You'll be expected to do very similar promotional
|
||||
work that you would do if you were self published.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="self-publishing-overview" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">How self publishing works</h2>
|
||||
<p>
|
||||
Self publishing removes the agent and publisher from the process. Instead,
|
||||
the author takes responsibility for preparing the book and distributing it
|
||||
through platforms such as Amazon KDP, IngramSpark, or audiobook services
|
||||
like ACX.
|
||||
</p>
|
||||
<p>
|
||||
The author controls the process from start to finish. That includes editing,
|
||||
cover design, formatting, pricing, and marketing.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
While this offers far greater control, it also means the author must learn
|
||||
skills traditionally handled by publishing professionals.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="self-publishing-pros" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Advantages of self publishing</h2>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>Full creative control</li>
|
||||
<li>Faster publishing timelines</li>
|
||||
<li>Higher royalty percentages</li>
|
||||
<li>Ability to publish longer or unconventional works</li>
|
||||
<li>Direct relationship with readers</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="mt-3 mb-0">
|
||||
For authors who enjoy the creative and technical side of publishing,
|
||||
self publishing can be extremely empowering.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="self-publishing-cons" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Challenges of self publishing</h2>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<ul class="mb-0">
|
||||
<li>The author must manage the entire publishing process</li>
|
||||
<li>Up-front costs such as covers, editing, or ISBNs</li>
|
||||
<li>Marketing responsibility falls largely on the author</li>
|
||||
<li>Discoverability can be difficult for new writers</li>
|
||||
<li>Bookshops may be less likely to stock independently published titles</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="mt-3 mb-0">
|
||||
Self publishing offers freedom, but it also requires a willingness to learn
|
||||
and manage many different aspects of the publishing process.
|
||||
</p>
|
||||
|
||||
<p class="mt-3 mb-0">
|
||||
Everything involved in self publishing is paid for by the author. Nothing is
|
||||
for free.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="genre-and-length-expectations" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Genre expectations and word counts</h2>
|
||||
<p>
|
||||
Traditional publishing often expects manuscripts to fit within specific
|
||||
genre categories and typical word-count ranges. For example, some genres
|
||||
have unofficial expectations around the length of a debut novel.
|
||||
</p>
|
||||
<p>
|
||||
Self publishing removes most of these constraints. Authors can experiment
|
||||
more freely with structure, length, and storytelling style.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
That freedom can be creatively liberating, but it also means the author must
|
||||
decide what works best for the story rather than relying on industry norms.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="control-vs-support" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">Control vs support</h2>
|
||||
<p>
|
||||
One of the clearest differences between the two approaches is the balance
|
||||
between control and support.
|
||||
</p>
|
||||
<p>
|
||||
Traditional publishing provides professional teams who help shape the book
|
||||
and bring it to market. Self publishing places that responsibility directly
|
||||
in the hands of the author.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
Some writers prefer the guidance and structure of traditional publishing,
|
||||
while others value the independence and flexibility of doing it themselves.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="my-view" class="mb-5">
|
||||
<h2 class="h3 fw-bold mb-3">My personal view</h2>
|
||||
<p>
|
||||
Both routes have strengths. Traditional publishing offers professional
|
||||
support and established distribution channels. Self publishing offers
|
||||
independence and creative freedom.
|
||||
</p>
|
||||
<p>
|
||||
For many authors the decision comes down to what they want from the experience.
|
||||
Some writers prefer to focus entirely on writing and leave the rest to a
|
||||
publishing team. Others enjoy being involved in every stage of bringing
|
||||
a book to life.
|
||||
</p>
|
||||
<p>
|
||||
Neither path is guaranteed to lead to success. Both require persistence,
|
||||
patience, and a willingness to keep improving with every book.
|
||||
</p>
|
||||
<p>
|
||||
For me, the decision was an easy one. My writing doesn't fall into a neat genre.
|
||||
Its gritty and raw and there simply isn't one that fits. In addition I like to write
|
||||
character rich stories where the characters develop and grow with the reader.
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
I feel
|
||||
that if I were to try and go down the traditional publishing route editors would hate
|
||||
my work. They'd want to reduce it considerably. They love limiting an author's work
|
||||
to 80,000 words whcih I could never allow. I also feel they would want to rip the
|
||||
heart out of my work, reducing the characterisation to just a few lines, making
|
||||
descriptive passages one paragraph maximum. Sorry, but that's not for me. I reckognise
|
||||
that emersive novels aren't for everyone, and that's fine. But they are what I like to
|
||||
write.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="sticky-lg-top" style="top: 2rem;">
|
||||
|
||||
<div class="card border-0 shadow-sm rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">On this page</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2"><a href="#traditional-publishing-overview" class="text-decoration-none">Traditional publishing</a></li>
|
||||
<li class="mb-2"><a href="#traditional-pros" class="text-decoration-none">Advantages</a></li>
|
||||
<li class="mb-2"><a href="#traditional-cons" class="text-decoration-none">Challenges</a></li>
|
||||
<li class="mb-2"><a href="#self-publishing-overview" class="text-decoration-none">Self publishing</a></li>
|
||||
<li class="mb-2"><a href="#self-publishing-pros" class="text-decoration-none">Advantages</a></li>
|
||||
<li class="mb-2"><a href="#self-publishing-cons" class="text-decoration-none">Challenges</a></li>
|
||||
<li class="mb-2"><a href="#genre-and-length-expectations" class="text-decoration-none">Genre expectations</a></li>
|
||||
<li class="mb-2"><a href="#control-vs-support" class="text-decoration-none">Control vs support</a></li>
|
||||
<li><a href="#my-view" class="text-decoration-none">My view</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-light rounded-4 mb-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Quick takeaway</h2>
|
||||
<p class="small mb-0">
|
||||
Traditional publishing offers support and distribution. Self publishing
|
||||
offers control and flexibility. The right choice depends on the author’s
|
||||
goals and working style.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card border-0 bg-white shadow-sm rounded-4">
|
||||
<div class="card-body p-4">
|
||||
<h2 class="h5 fw-bold mb-3">Related guides</h2>
|
||||
<ul class="list-unstyled small mb-0">
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="ReviewsAndArcReaders" class="text-decoration-none">
|
||||
Reviews and ARC Readers
|
||||
</a>
|
||||
</li>
|
||||
<li class="mb-2">
|
||||
<a asp-controller="IndieAuthor" asp-action="KdpVsIngramSpark" class="text-decoration-none">
|
||||
KDP vs IngramSpark
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a asp-controller="IndieAuthor" asp-action="Index" class="text-decoration-none">
|
||||
Guide Index
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-top pt-4 mt-5">
|
||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
||||
<a asp-controller="IndieAuthor" asp-action="Index" class="btn btn-dark">
|
||||
Back to guide index
|
||||
</a>
|
||||
|
||||
<a asp-controller="IndieAuthor" asp-action="Isbns" class="btn btn-dark">
|
||||
Next: ISBNs
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -1,8 +1,8 @@
|
||||
@{
|
||||
ViewData["Title"] = "Extras";
|
||||
|
||||
ViewData["Title"] = "The Alpha Flame: Reckoning Extras";
|
||||
int? accessLevel = Context.Session.GetInt32("BookAccessLevel");
|
||||
int? accessBook = Context.Session.GetInt32("BookAccessMax");
|
||||
|
||||
}
|
||||
|
||||
<div class="row">
|
||||
@ -11,7 +11,7 @@
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page"><a asp-controller="TheAlphaFlame" asp-action="Index">The Alpha Flame</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page"><a asp-controller="Discovery" asp-action="Index">Discovery</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page"><a asp-controller="Reckoning" asp-action="Index">Reckoning</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Extras</li>
|
||||
</ol>
|
||||
</nav>
|
||||
@ -19,100 +19,43 @@
|
||||
</div>
|
||||
|
||||
<div class="container mt-5">
|
||||
<h1 class="extras-header">Your Exclusive Extras</h1>
|
||||
|
||||
@if (accessBook == 1)
|
||||
{
|
||||
<div class="extras-grid mt-4">
|
||||
@if (accessLevel >= 1)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Epilogue</h5>
|
||||
<p class="card-text">Immerse yourself in the Eplilogue to The Alpha Flame: Discovery. Join the team as they relax for a quite drink at the Barnt Green Inn</p>
|
||||
<a asp-controller="Discovery" asp-action="Epilogue" class="btn btn-dark btn-sm">Read or Listen</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (accessLevel >= 2)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Discovery Scrap Book</h5>
|
||||
<p class="card-text">Take a look at my image scrapbook for The Alpha Flame: Discovery. View the images I used for inspiration when writing the various scenes within the book.</p>
|
||||
<a asp-controller="Discovery" asp-action="ScrapBook" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Discovery Soundtrack</h5>
|
||||
<p class="card-text">Have a listen to The Alpha Flame soundtrack. A selection of original songs written by me and put to music.</p>
|
||||
<a asp-controller="Discovery" asp-action="Soundtrack" class="btn btn-dark btn-sm">Soundtrack</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (accessLevel >= 3)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Listen to The Alpha Flame: Discovery</h5>
|
||||
<p class="card-text">Because you've purchased a premium physical copy of The Alpha Flame: Discovery, for a limited time this entitles you to listen to the audio version with no extra charge.</p>
|
||||
<a asp-controller="Discovery" asp-action="Listen" class="btn btn-dark btn-sm">Listen to the Book</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Scrapbook: Maggie’s Designs</h5>
|
||||
<p class="card-text">Flip through Maggie’s sketches, fashion notes, and photos from her original designs – including the infamous red skirt.</p>
|
||||
<a asp-controller="Discovery" asp-action="MaggiesDesigns" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
else if (accessBook == 2)
|
||||
{
|
||||
|
||||
<div class="extras-grid mt-4">
|
||||
@if (accessLevel >= 1)
|
||||
{
|
||||
|
||||
}
|
||||
else if (accessLevel >= 2)
|
||||
{
|
||||
|
||||
}
|
||||
else if (accessLevel >= 3)
|
||||
{
|
||||
|
||||
}
|
||||
else if(accessLevel >= 4)
|
||||
{
|
||||
|
||||
}
|
||||
<h1 class="extras-header">The Alpha Flame Reckoning Exclusive Extras</h1>
|
||||
<div class="extras-grid mt-4">
|
||||
@if (accessLevel >= 1)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Epilogue</h5>
|
||||
<p class="card-text">Immerse yourself in the Eplilogue to The Alpha Flame: Discovery. Join the team as they relax for a quite drink at the Barnt Green Inn</p>
|
||||
<a asp-controller="Discovery" asp-action="Epilogue" class="btn btn-dark btn-sm">Read or Listen</a>
|
||||
<a asp-action="Epilogue" class="btn btn-dark btn-sm">Read or Listen</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
}
|
||||
@if (accessLevel >= 2)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Discovery Scrap Book</h5>
|
||||
<p class="card-text">Take a look at my image scrapbook for The Alpha Flame: Discovery. View the images I used for inspiration when writing the various scenes within the book.</p>
|
||||
<a asp-controller="Discovery" asp-action="ScrapBook" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
<a asp-action="ScrapBook" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Rubery Hill Photo Archive</h5>
|
||||
<p class="card-text">Explore historical photos and floor plans of the real Rubery Hill Hospital, the eerie inspiration behind key scenes.</p>
|
||||
<a href="/extras/rubery-hill-photos" class="btn btn-dark btn-sm">Explore</a>
|
||||
<h5 class="card-title">Discovery Soundtrack</h5>
|
||||
<p class="card-text">Have a listen to The Alpha Flame soundtrack. A selection of original songs written by me and put to music.</p>
|
||||
<a asp-action="Soundtrack" class="btn btn-dark btn-sm">Soundtrack</a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (accessLevel >= 3)
|
||||
{
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Listen to The Alpha Flame: Discovery</h5>
|
||||
<p class="card-text">Because you've purchased a premium physical copy of The Alpha Flame: Discovery, for a limited time this entitles you to listen to the audio version with no extra charge.</p>
|
||||
<a asp-action="Listen" class="btn btn-dark btn-sm">Listen to the Book</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -120,56 +63,14 @@
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Scrapbook: Maggie’s Designs</h5>
|
||||
<p class="card-text">Flip through Maggie’s sketches, fashion notes, and photos from her original designs – including the infamous red skirt.</p>
|
||||
<a asp-controller="Discovery" asp-action="MaggiesDesigns" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
<a asp-action="MaggiesDesigns" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
}
|
||||
else if (accessBook == 3)
|
||||
{
|
||||
<div class="extras-grid mt-4">
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Epilogue</h5>
|
||||
<p class="card-text">Immerse yourself in the Eplilogue to The Alpha Flame: Discovery. Join the team as they relax for a quite drink at the Barnt Green Inn</p>
|
||||
<a asp-controller="Discovery" asp-action="Epilogue" class="btn btn-dark btn-sm">Read or Listen</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Discovery Scrap Book</h5>
|
||||
<p class="card-text">Take a look at my image scrapbook for The Alpha Flame: Discovery. View the images I used for inspiration when writing the various scenes within the book.</p>
|
||||
<a asp-controller="Discovery" asp-action="ScrapBook" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Rubery Hill Photo Archive</h5>
|
||||
<p class="card-text">Explore historical photos and floor plans of the real Rubery Hill Hospital, the eerie inspiration behind key scenes.</p>
|
||||
<a href="/extras/rubery-hill-photos" class="btn btn-dark btn-sm">Explore</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card extra-card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Scrapbook: Maggie’s Designs</h5>
|
||||
<p class="card-text">Flip through Maggie’s sketches, fashion notes, and photos from her original designs – including the infamous red skirt.</p>
|
||||
<a asp-controller="Discovery" asp-action="MaggiesDesigns" class="btn btn-dark btn-sm">View Scrapbook</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@section Meta{
|
||||
@section Meta {
|
||||
<style>
|
||||
.extras-header {
|
||||
text-align: center;
|
||||
|
||||
@ -1,285 +1,264 @@
|
||||
@model CatherineLynwood.Models.TitlePageViewModel
|
||||
|
||||
@{
|
||||
var releaseDate = new DateTime(2026, 4, 1);
|
||||
ViewData["Title"] = $"The Alpha Flame: Reckoning — Pre-Release (out {releaseDate: d MMMM yyyy})";
|
||||
ViewData["Title"] = "The Alpha Flame: Reckoning";
|
||||
}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Index">The Alpha Flame</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Reckoning</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
<div class="reckoning-page-shell">
|
||||
<!-- Detective desk / case file section -->
|
||||
<section class="reckoning-desk-section">
|
||||
<div class="reckoning-desk-surface">
|
||||
|
||||
<!-- HERO: Cover + Coming Soon panel -->
|
||||
<section class="mb-4">
|
||||
<div class="row g-3 align-items-stretch">
|
||||
<div class="reckoning-desk-props">
|
||||
<div class="reckoning-desk-photos">
|
||||
<div class="reckoning-desk-photo reckoning-desk-photo-1">
|
||||
<responsive-image src="flyover-at-night.png" class="img-fluid" alt="The Rubery flyover at night time" display-width-percentage="50"></responsive-image>
|
||||
</div>
|
||||
<div class="reckoning-desk-photo reckoning-desk-photo-2">
|
||||
<responsive-image src="sophie-jones-nightclub.png" class="img-fluid" alt="Sophie Jones" display-width-percentage="50"></responsive-image>
|
||||
</div>
|
||||
<div class="reckoning-desk-photo reckoning-desk-photo-3">
|
||||
<responsive-image src="the-alpha-flame-reckoning-cover.png" class="img-fluid" alt="Maggie Grant" display-width-percentage="50"></responsive-image>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Book Cover -->
|
||||
<div class="col-lg-5 d-flex">
|
||||
<div class="card character-card h-100 flex-fill" id="cover-card">
|
||||
<responsive-image src="the-alpha-flame-reckoning-cover.png"
|
||||
class="card-img-top"
|
||||
alt="The Alpha Flame: Reckoning book cover"
|
||||
display-width-percentage="50"></responsive-image>
|
||||
<div class="card-body border-top border-3 border-dark">
|
||||
<h3 class="card-title h5 mb-1">The Alpha Flame: <span class="fw-light">Reckoning</span></h3>
|
||||
<p class="card-text mb-0">
|
||||
Book 2 of the Alpha Flame trilogy.
|
||||
The danger didn’t end with <em>Discovery</em>. It got smarter.
|
||||
</p>
|
||||
<div class="reckoning-desk-postit">
|
||||
<span>Fashion show<br />Scandals,<br />tonight!</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Launch panel -->
|
||||
<div class="col-lg-7 d-flex">
|
||||
<div class="card character-card h-100 flex-fill" id="hero-media-card">
|
||||
<div class="card-body d-flex flex-column">
|
||||
<div class="reckoning-casefile-page">
|
||||
<div class="casefile-stage">
|
||||
|
||||
<div>
|
||||
<div class="casefile" id="caseFile">
|
||||
|
||||
<h3 class="card-title">The Alpha Flame: <span class="fw-light">Reckoning</span></h3>
|
||||
<div class="casefile-rear">
|
||||
<img src="/images/webp/folder-rear.webp" alt="Case file interior" class="casefile-rear-img" />
|
||||
<div class="casefile-flap-shadow"></div>
|
||||
|
||||
<p class="fst-italic">
|
||||
Two flames, once divided, now burn as one. Bound by blood, scarred by secrets, they rise to face the fire that made them.
|
||||
</p>
|
||||
<div class="casefile-inner">
|
||||
<div class="casefile-paper-stack">
|
||||
<div class="casefile-paper-stack-layer casefile-paper-stack-layer-1"></div>
|
||||
<div class="casefile-paper-stack-layer casefile-paper-stack-layer-2"></div>
|
||||
|
||||
<p>
|
||||
After everything they survived in <em>Discovery</em>, Maggie and Beth should finally be free.
|
||||
Instead, the nightmares follow them into daylight, and the past starts tugging at them with intent.
|
||||
Beth is still rebuilding herself piece by piece. Maggie is trying to hold everything together.
|
||||
And somewhere in the background, the people who benefitted from Beth’s silence are quietly noticing that she is no longer alone.
|
||||
</p>
|
||||
<div class="casefile-content">
|
||||
<div class="casefile-panel active" data-tab="summary">
|
||||
<partial name="_ReckoningSummary" model="Model"></partial>
|
||||
</div>
|
||||
|
||||
<hr class="my-4" />
|
||||
<div class="casefile-panel" data-tab="subjects">
|
||||
<partial name="_ReckoningSubjects" model="Model"></partial>
|
||||
</div>
|
||||
|
||||
<h4 class="mb-3"><i class="fa-solid fa-fire-flame-curved me-2"></i>The search for truth</h4>
|
||||
<div class="casefile-panel" data-tab="evidence">
|
||||
<partial name="_ReckoningEvidence" model="Model"></partial>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
The girls return to the fragments their mother left behind: the memory tin, the poem, and the wedding photograph.
|
||||
What once felt like sentimental debris starts to look like a trail. A puzzle built on purpose.
|
||||
Maggie, driven and sharp, refuses to accept that their mother’s life ended without meaning.
|
||||
Beth, fragile but braver than she realises, wants answers even if they hurt.
|
||||
</p>
|
||||
<div class="casefile-panel" data-tab="notes">
|
||||
<partial name="_ReckoningReview" model="Model"></partial>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Their search pulls them toward Wales, toward names and places their mother never explained, and toward people who remember her
|
||||
not as a ghost story, but as a living woman with fire in her bones.
|
||||
The closer they get, the more they realise they are not the only ones searching.
|
||||
</p>
|
||||
<div class="casefile-panel" data-tab="buy">
|
||||
<partial name="_ReckoningBuy" model="Model"></partial>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-secondary mt-4" role="alert">
|
||||
<div class="d-flex">
|
||||
<div class="me-3">
|
||||
<i class="fa-solid fa-triangle-exclamation"></i>
|
||||
<div class="casefile-panel restricted-panel" data-tab="restricted">
|
||||
<partial name="_ReckoningRestricted" model="Model"></partial>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<strong>Things escalate fast.</strong> A familiar car appears. Old fear becomes new danger. Running stops being a metaphor.
|
||||
|
||||
<div class="casefile-tabs">
|
||||
<button type="button" class="casefile-tab active" data-tab="summary">Summary</button>
|
||||
<button type="button" class="casefile-tab" data-tab="subjects">Subjects</button>
|
||||
<button type="button" class="casefile-tab" data-tab="evidence">Evidence</button>
|
||||
<button type="button" class="casefile-tab" data-tab="notes">Review</button>
|
||||
<button type="button" class="casefile-tab" data-tab="buy">Purchase</button>
|
||||
<button type="button" class="casefile-tab restricted" data-tab="restricted">Restricted</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="casefile-front" id="caseFileFront" role="button" tabindex="0" aria-label="Open case file">
|
||||
<div class="casefile-front-face casefile-front-face-front">
|
||||
<img src="/images/webp/folder-front.webp" alt="Case file cover" class="casefile-front-img" />
|
||||
|
||||
<div class="casefile-front-overlay">
|
||||
<div class="casefile-stamp">
|
||||
RESTRICTED
|
||||
</div>
|
||||
|
||||
<div class="casefile-cover-text">
|
||||
<div class="casefile-cover-kicker">WEST MIDLANDS POLICE</div>
|
||||
<h1>ALPHA FLAME: RECKONING</h1>
|
||||
<p>Case Ref: AFR-1983-06</p>
|
||||
<p>Status: Active Investigation</p>
|
||||
</div>
|
||||
|
||||
<div class="casefile-open-hint">Click to open file</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="casefile-front-face casefile-front-face-back">
|
||||
<img src="/images/webp/folder-front-inside.webp" alt="" class="casefile-front-img casefile-front-img-back" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Call to action row -->
|
||||
<div class="d-flex gap-3 flex-wrap">
|
||||
@* <a asp-controller="TheAlphaFlame" asp-action="MailingList" class="btn btn-dark">
|
||||
Notify me on release
|
||||
</a> *@
|
||||
<a asp-controller="Discovery" asp-action="Index" class="btn btn-outline-dark">
|
||||
Start with Discovery
|
||||
</a>
|
||||
<a asp-controller="TheAlphaFlame" asp-action="Index" class="btn btn-outline-secondary">
|
||||
Explore the trilogy
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Small continuity note -->
|
||||
<div class="mt-3 small text-muted">
|
||||
<strong>Tip:</strong> <em>Reckoning</em> follows directly after <em>Discovery</em>.
|
||||
If you’re new to the series, start there for maximum emotional damage.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Synopsis (pre-release: shorter, tighter) -->
|
||||
<section id="synopsis" class="mb-4">
|
||||
<div class="card character-card text-white"
|
||||
style="background: url('/images/webp/bridge-over-the-river-960.webp'); background-position: center; background-size: cover;">
|
||||
<div class="card-header">
|
||||
<h2 class="card-title h1 mb-0">The Alpha Flame: <span class="fw-light">Reckoning</span></h2>
|
||||
<p class="mb-0">When the past returns, it doesn’t knock. It takes.</p>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<h4 class="mb-3"><i class="fa-solid fa-car-burst me-2"></i>The watcher returns</h4>
|
||||
|
||||
<p class="card-text">
|
||||
Back in Birmingham, the threat stops lurking and starts moving.
|
||||
A blue Ford Escort appears outside a safe doorstep and turns a tense conversation into a race for survival.
|
||||
The girls flee through back roads and service lanes, only to be hunted in the open, the Escort glued to their rear bumper like fate.
|
||||
It is not random. It is not a coincidence. Someone has been sent.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
Worse still, the fallout reaches the police. Mrs Patterson, the neighbour who knows too much, turns up dead.
|
||||
Graham arrives with questions he does not want to ask, and DI Baker arrives with the kind of presence that poisons a room.
|
||||
The message is clear: even authority cannot be assumed safe.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3"><i class="fad fa-mountain me-2"></i>Wales, family, and the key</h4>
|
||||
|
||||
<p class="card-text">
|
||||
Wales offers a temporary illusion of peace: wide skies, old farms, warm kitchens, and people who speak your mother’s name
|
||||
like she mattered. For the first time, Beth and Maggie experience something dangerously close to ordinary.
|
||||
But the ordinary does not last.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
The poem changes. Literally. A second version appears, with new stanzas that reframe everything.
|
||||
What the girls believed was a single trail is revealed as a deliberate split: one path for the wrong eyes,
|
||||
another for the right ones. Their mother planned for predators. She built decoys.
|
||||
And she hid the real direction in plain sight, waiting for the day her daughters would be ready to understand it.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
A deposit box key is found, tucked away where it was never supposed to be noticed.
|
||||
Now the question is not whether their mother left something behind, but what she was protecting, and from whom.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3"><i class="fad fa-user-secret me-2"></i>Names that change everything</h4>
|
||||
|
||||
<p class="card-text">
|
||||
Answers arrive in the worst way: through memory, confession, and people who were there when the damage began.
|
||||
Gareth finally tells the story of Annie, Elen, and the night the trap was set.
|
||||
He names the man at the centre of it all: <strong>Simon Jones</strong>.
|
||||
Not a faceless monster, but a real figure with reach, money, and a network built on fear.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
The revelation detonates Beth’s fragile stability. The past is not behind her.
|
||||
It is connected to everything still happening now, and to Sophie’s world in Birmingham.
|
||||
The girls are not just searching for identity anymore.
|
||||
They are standing on a fault line that runs straight through power, crime, and corruption.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3">The boxes open</h4>
|
||||
|
||||
<p class="card-text">
|
||||
When the second deposit box finally opens, it is not comfort inside. It is evidence.
|
||||
Their mother left them a ledger of real accounts, receipts, photos, recordings, and a copied key tied to Sophie’s safe.
|
||||
It is a package designed to destroy Simon Jones, but it comes with a brutal catch:
|
||||
the final identities, the protected names, the ones behind the coded initials, are stored elsewhere,
|
||||
locked in Sophie’s personal safe in a red case.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
Their mother did not leave them a neat answer.
|
||||
She left them a weapon, and a warning.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3"><i class="fad fa-heart me-2"></i>The reckoning hits home</h4>
|
||||
|
||||
<p class="card-text">
|
||||
As the net tightens, the violence stops being distant. It becomes intimate.
|
||||
During a final clash, Rob steps into the line of fire for Maggie.
|
||||
In the silence of a ruined place, he bleeds out in her arms, and the future they were building collapses in seconds.
|
||||
His death is not just loss. It is consequence.
|
||||
It is the cost of standing beside someone the darkness wants back.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
Grief does not pause the danger. If anything, it sharpens it.
|
||||
Maggie and Beth are no longer just survivors.
|
||||
They are holding proof that could bring down an empire, and every powerful person connected to it.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3"><i class="fad fa-door-open me-2"></i>The knock</h4>
|
||||
|
||||
<p class="card-text">
|
||||
The story closes with the world catching up.
|
||||
The authorities circle. Baker’s shadow stretches.
|
||||
And just when it seems the girls might get a breath, duty arrives on the doorstep.
|
||||
The past has claimed another body, and someone needs a suspect.
|
||||
The final beat lands exactly as it should:
|
||||
a knock that changes everything, and the unmistakable sense that what comes next will not be gentle.
|
||||
</p>
|
||||
|
||||
|
||||
<div class="mt-3 d-flex gap-2 flex-wrap">
|
||||
<a asp-controller="Discovery" asp-action="Extras" class="btn btn-outline-light btn-sm">
|
||||
Unlock Discovery extras
|
||||
</a>
|
||||
<a asp-controller="TheAlphaFlame" asp-action="Index" class="btn btn-outline-light btn-sm">
|
||||
The trilogy overview
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<!-- Pre-release: No fake previews / no empty reviews -->
|
||||
@* <section class="mt-4">
|
||||
<div class="card character-card">
|
||||
<div class="card-body">
|
||||
<h2 class="h5 fw-bold mb-2">Preview content</h2>
|
||||
<p class="mb-3">
|
||||
Previews, sample chapters, and reader reviews will appear here once they’re ready.
|
||||
Until then, <em>Discovery</em> is available now.
|
||||
</p>
|
||||
<div class="d-flex gap-2 flex-wrap">
|
||||
<a asp-controller="Discovery" asp-action="Index" class="btn btn-dark">Explore Discovery</a>
|
||||
<a asp-controller="Discovery" asp-action="Reviews" class="btn btn-outline-dark">See Discovery reviews</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section> *@
|
||||
</div>
|
||||
|
||||
@section BackgroundVideo {
|
||||
<div></div>
|
||||
}
|
||||
|
||||
@section CSS {
|
||||
<link href="~/css/reckoning.css" rel="stylesheet" />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Permanent+Marker&family=Shadows+Into+Light&display=swap" rel="stylesheet">
|
||||
}
|
||||
|
||||
@section Scripts {
|
||||
<!-- Plyr for audio (only needed if you keep the audio block) -->
|
||||
<script>
|
||||
const player = new Plyr('audio');
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const trigger = document.querySelector(".casefile-audio-trigger");
|
||||
const audio = document.getElementById("evidenceTapeAudio");
|
||||
|
||||
if (!trigger || !audio) return;
|
||||
|
||||
trigger.addEventListener("click", function () {
|
||||
if (audio.paused) {
|
||||
audio.play().then(function () {
|
||||
trigger.classList.add("is-playing");
|
||||
}).catch(function () {
|
||||
});
|
||||
} else {
|
||||
audio.pause();
|
||||
trigger.classList.remove("is-playing");
|
||||
}
|
||||
});
|
||||
|
||||
audio.addEventListener("pause", function () {
|
||||
if (!audio.ended) {
|
||||
trigger.classList.remove("is-playing");
|
||||
}
|
||||
});
|
||||
|
||||
audio.addEventListener("ended", function () {
|
||||
trigger.classList.remove("is-playing");
|
||||
audio.currentTime = 0;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const caseFile = document.getElementById("caseFile");
|
||||
const frontCover = document.getElementById("caseFileFront");
|
||||
const tabs = caseFile.querySelectorAll(".casefile-tab");
|
||||
const panels = caseFile.querySelectorAll(".casefile-panel");
|
||||
const images = caseFile.querySelectorAll("img");
|
||||
|
||||
let loadedCount = 0;
|
||||
let assetsReady = false;
|
||||
let openTimer = null;
|
||||
let isOpening = false;
|
||||
let hasEnteredView = false;
|
||||
|
||||
function openCaseFile() {
|
||||
if (!assetsReady || isOpening || caseFile.classList.contains("open")) {
|
||||
return;
|
||||
}
|
||||
|
||||
isOpening = true;
|
||||
caseFile.classList.add("revealed");
|
||||
caseFile.classList.add("open");
|
||||
|
||||
if (openTimer) {
|
||||
clearTimeout(openTimer);
|
||||
openTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
function startAutoOpenTimer() {
|
||||
if (!assetsReady || hasEnteredView === false || openTimer || caseFile.classList.contains("open")) {
|
||||
return;
|
||||
}
|
||||
|
||||
openTimer = setTimeout(() => {
|
||||
openCaseFile();
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
function onAssetLoaded() {
|
||||
loadedCount++;
|
||||
|
||||
if (loadedCount === images.length) {
|
||||
assetsReady = true;
|
||||
caseFile.classList.add("assets-ready");
|
||||
|
||||
setTimeout(() => {
|
||||
caseFile.classList.add("ready");
|
||||
}, 250);
|
||||
|
||||
startAutoOpenTimer();
|
||||
}
|
||||
}
|
||||
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting && !hasEnteredView) {
|
||||
hasEnteredView = true;
|
||||
startAutoOpenTimer();
|
||||
observer.disconnect();
|
||||
}
|
||||
});
|
||||
}, {
|
||||
threshold: 0.35
|
||||
});
|
||||
|
||||
observer.observe(caseFile);
|
||||
|
||||
images.forEach(img => {
|
||||
if (img.complete) {
|
||||
onAssetLoaded();
|
||||
} else {
|
||||
img.addEventListener("load", onAssetLoaded, { once: true });
|
||||
img.addEventListener("error", onAssetLoaded, { once: true });
|
||||
}
|
||||
});
|
||||
|
||||
frontCover.addEventListener("click", function () {
|
||||
openCaseFile();
|
||||
});
|
||||
|
||||
frontCover.addEventListener("keydown", function (e) {
|
||||
if (e.key === "Enter" || e.key === " ") {
|
||||
e.preventDefault();
|
||||
openCaseFile();
|
||||
}
|
||||
});
|
||||
|
||||
tabs.forEach(tab => {
|
||||
tab.addEventListener("click", function () {
|
||||
const tabName = this.dataset.tab;
|
||||
|
||||
tabs.forEach(t => t.classList.remove("active"));
|
||||
panels.forEach(p => p.classList.remove("active"));
|
||||
|
||||
this.classList.add("active");
|
||||
|
||||
const targetPanel = caseFile.querySelector(`.casefile-panel[data-tab="${tabName}"]`);
|
||||
if (targetPanel) {
|
||||
targetPanel.classList.add("active");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
}
|
||||
|
||||
@section Meta {
|
||||
<MetaTag meta-title="The Alpha Flame: Reckoning by Catherine Lynwood (Pre-Release)"
|
||||
meta-description="Reckoning is the upcoming second book in The Alpha Flame trilogy. 1983 Birmingham. Consequences, secrets, and survival… Coming 1 April 2026."
|
||||
meta-keywords="The Alpha Flame Reckoning, Catherine Lynwood, 1983 novel, Birmingham fiction, suspense fiction, family secrets, psychological crime, historical drama"
|
||||
meta-author="Catherine Lynwood"
|
||||
meta-url="https://www.catherinelynwood.com/the-alpha-flame/reckoning"
|
||||
meta-image="https://www.catherinelynwood.com/images/webp/the-alpha-flame-reckoning-cover-1200.webp"
|
||||
meta-image-png="https://www.catherinelynwood.com/images/the-alpha-flame-reckoning-cover.png"
|
||||
meta-image-alt="The Alpha Flame: Reckoning by Catherine Lynwood"
|
||||
og-site-name="Catherine Lynwood - The Alpha Flame: Reckoning"
|
||||
article-published-time="@new DateTime(2026, 04, 01)"
|
||||
article-modified-time="@DateTime.UtcNow"
|
||||
twitter-card-type="summary_large_image"
|
||||
twitter-site-handle="@@CathLynwood"
|
||||
twitter-creator-handle="@@CathLynwood" />
|
||||
}
|
||||
|
||||
143
CatherineLynwood/Views/Reckoning/IndexMobile.cshtml
Normal file
143
CatherineLynwood/Views/Reckoning/IndexMobile.cshtml
Normal file
@ -0,0 +1,143 @@
|
||||
@model CatherineLynwood.Models.TitlePageViewModel
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "The Alpha Flame: Reckoning";
|
||||
bool showReviews = Model.Reviews.Items.Any();
|
||||
}
|
||||
|
||||
<div class="reckoning-mobile-page">
|
||||
|
||||
<header class="reckoning-mobile-hero">
|
||||
<div class="reckoning-mobile-hero-inner">
|
||||
<div class="reckoning-mobile-stamp">RESTRICTED</div>
|
||||
<div class="reckoning-mobile-kicker">WEST MIDLANDS POLICE</div>
|
||||
<h1>The Alpha Flame: Reckoning</h1>
|
||||
<p class="reckoning-mobile-ref">Case Ref: AFR-1983-06</p>
|
||||
<p class="reckoning-mobile-status">Status: Active Investigation</p>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="reckoning-mobile-props">
|
||||
<div class="reckoning-mobile-props-scroll">
|
||||
<div class="reckoning-mobile-polaroid polaroid-tilt-left">
|
||||
<responsive-image src="the-alpha-flame-reckoning-cover.png"
|
||||
class="img-polaroid"
|
||||
alt="The Alpha Flame: Reckoning book cover"
|
||||
display-width-percentage="50"></responsive-image>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="reckoning-mobile-polaroid polaroid-tilt-right">
|
||||
<responsive-image src="sophie-jones-nightclub.png"
|
||||
class="img-polaroid"
|
||||
alt="Sophie Jones"
|
||||
display-width-percentage="50"></responsive-image>
|
||||
</div>
|
||||
|
||||
<div class="reckoning-mobile-polaroid polaroid-tilt-slight">
|
||||
<responsive-image src="flyover-at-night.png"
|
||||
class="img-polaroid"
|
||||
alt="The Rubery flyover at night time"
|
||||
display-width-percentage="50"></responsive-image>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<nav class="reckoning-mobile-nav">
|
||||
<a href="#summary">Summary</a>
|
||||
<a href="#subjects">Subjects</a>
|
||||
<a href="#evidence">Evidence</a>
|
||||
<a href="#review">Review</a>
|
||||
<a href="#purchase">Buy</a>
|
||||
<a href="#restricted">Restricted</a>
|
||||
</nav>
|
||||
|
||||
<main class="reckoning-mobile-file">
|
||||
|
||||
<section id="summary" class="reckoning-mobile-section">
|
||||
<div class="reckoning-mobile-tab reckoning-tab-summary">Summary</div>
|
||||
<div class="reckoning-mobile-paper">
|
||||
@await Html.PartialAsync("_ReckoningSummary", Model)
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="subjects" class="reckoning-mobile-section">
|
||||
<div class="reckoning-mobile-tab reckoning-tab-subjects">Subjects</div>
|
||||
<div class="reckoning-mobile-paper">
|
||||
@await Html.PartialAsync("_ReckoningSubjects", Model)
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="evidence" class="reckoning-mobile-section">
|
||||
<div class="reckoning-mobile-tab reckoning-tab-evidence">Evidence</div>
|
||||
<div class="reckoning-mobile-paper">
|
||||
@await Html.PartialAsync("_ReckoningEvidence", Model)
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="review" class="reckoning-mobile-section">
|
||||
<div class="reckoning-mobile-tab reckoning-tab-review">Review</div>
|
||||
<div class="reckoning-mobile-paper">
|
||||
@await Html.PartialAsync("_ReckoningReview", Model)
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="purchase" class="reckoning-mobile-section">
|
||||
<div class="reckoning-mobile-tab reckoning-tab-purchase">Purchase</div>
|
||||
<div class="reckoning-mobile-paper">
|
||||
@await Html.PartialAsync("_ReckoningBuy", Model)
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="restricted" class="reckoning-mobile-section">
|
||||
<div class="reckoning-mobile-tab reckoning-tab-restricted">Restricted</div>
|
||||
<div class="reckoning-mobile-paper">
|
||||
@await Html.PartialAsync("_ReckoningRestricted", Model)
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
|
||||
@section BackgroundVideo {
|
||||
<div></div>
|
||||
}
|
||||
|
||||
@section CSS {
|
||||
<link href="~/css/reckoning-mobile.css" rel="stylesheet" />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Permanent+Marker&family=Shadows+Into+Light&display=swap" rel="stylesheet">
|
||||
}
|
||||
|
||||
@section Scripts {
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const trigger = document.querySelector(".casefile-audio-trigger");
|
||||
const audio = document.getElementById("evidenceTapeAudio");
|
||||
|
||||
if (!trigger || !audio) return;
|
||||
|
||||
trigger.addEventListener("click", function () {
|
||||
if (audio.paused) {
|
||||
audio.play().then(function () {
|
||||
trigger.classList.add("is-playing");
|
||||
}).catch(function () {
|
||||
});
|
||||
} else {
|
||||
audio.pause();
|
||||
trigger.classList.remove("is-playing");
|
||||
}
|
||||
});
|
||||
|
||||
audio.addEventListener("pause", function () {
|
||||
if (!audio.ended) {
|
||||
trigger.classList.remove("is-playing");
|
||||
}
|
||||
});
|
||||
|
||||
audio.addEventListener("ended", function () {
|
||||
trigger.classList.remove("is-playing");
|
||||
audio.currentTime = 0;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
}
|
||||
375
CatherineLynwood/Views/Reckoning/Index_2.cshtml
Normal file
375
CatherineLynwood/Views/Reckoning/Index_2.cshtml
Normal file
@ -0,0 +1,375 @@
|
||||
@*
|
||||
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
*@
|
||||
@{
|
||||
}
|
||||
|
||||
<div class="reckoning-page-shell">
|
||||
|
||||
<!-- Hero / standard book layout -->
|
||||
<section class="reckoning-hero-section">
|
||||
<div class="reckoning-hero-video">
|
||||
<video id="siteBackgroundVideo"
|
||||
class="reckoning-hero-video-element"
|
||||
autoplay
|
||||
muted
|
||||
loop
|
||||
playsinline
|
||||
preload="none">
|
||||
</video>
|
||||
<div class="reckoning-hero-video-overlay"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="container-xxl">
|
||||
<div class="row reckoning-hero-row align-items-stretch">
|
||||
|
||||
<div class="col-lg-5 col-xl-4 d-flex reckoning-hero-cover-column">
|
||||
<div class="reckoning-hero-cover-panel">
|
||||
<div class="card character-card h-100 flex-fill" id="cover-card">
|
||||
<responsive-image src="the-alpha-flame-reckoning-cover.png"
|
||||
class="card-img-top"
|
||||
alt="The Alpha Flame: Reckoning book cover"
|
||||
display-width-percentage="50"></responsive-image>
|
||||
<div class="card-body border-top border-3 border-dark">
|
||||
<h3 class="card-title h5 mb-1">The Alpha Flame: <span class="fw-light">Reckoning</span></h3>
|
||||
<p class="card-text mb-0">
|
||||
Book 2 of the Alpha Flame trilogy.
|
||||
The danger didn’t end with <em>Discovery</em>. It got smarter.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-7 col-xl-8 d-flex reckoning-hero-info-column">
|
||||
<div class="reckoning-hero-info-panel">
|
||||
<div class="card character-card h-100 flex-fill" id="hero-media-card">
|
||||
<div class="card-body d-flex flex-column">
|
||||
|
||||
<div>
|
||||
|
||||
<h3 class="card-title">The Alpha Flame: <span class="fw-light">Reckoning</span></h3>
|
||||
|
||||
<p class="fst-italic">
|
||||
Some secrets stay buried. Others demand a reckoning.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
After everything they survived in <em>Discovery</em>, Maggie and Beth should finally be free.
|
||||
Instead, the nightmares follow them into daylight, and the past starts tugging at them with intent.
|
||||
Beth is still rebuilding herself piece by piece. Maggie is trying to hold everything together.
|
||||
And somewhere in the background, the people who benefitted from Beth’s silence are quietly noticing that she is no longer alone.
|
||||
</p>
|
||||
<p>
|
||||
As the truth about their mother begins to surface, Maggie and Beth are drawn deeper into a web of lies,
|
||||
hidden money, and dangerous men who would do anything to keep old secrets buried. The closer they get to the
|
||||
truth, the clearer it becomes that someone has been watching them all along.
|
||||
</p>
|
||||
<p>
|
||||
And this time, walking away isn’t an option.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Call to action row -->
|
||||
<div class="d-flex gap-3 flex-wrap">
|
||||
<a asp-controller="Discovery" asp-action="Index" class="btn btn-outline-dark">
|
||||
Start with Discovery
|
||||
</a>
|
||||
<a asp-controller="TheAlphaFlame" asp-action="Index" class="btn btn-outline-secondary">
|
||||
Explore the trilogy
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Small continuity note -->
|
||||
<div class="mt-3 small text-muted">
|
||||
<strong>Tip:</strong> <em>Reckoning</em> follows directly after <em>Discovery</em>.
|
||||
If you’re new to the series, start there for maximum emotional damage.
|
||||
</div>
|
||||
|
||||
@await Component.InvokeAsync("BuyPanel", new { ISO2 = Model.UserIso2, Src = Model.Src, Title = Model.Title })
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Detective desk / case file section -->
|
||||
<section class="reckoning-desk-section">
|
||||
<div class="reckoning-desk-surface">
|
||||
|
||||
<div class="reckoning-desk-props">
|
||||
<div class="reckoning-desk-photos">
|
||||
<div class="reckoning-desk-photo reckoning-desk-photo-1">
|
||||
<responsive-image src="flyover-at-night.png" class="img-fluid" alt="The Rubery flyover at night time" display-width-percentage="50"></responsive-image>
|
||||
</div>
|
||||
<div class="reckoning-desk-photo reckoning-desk-photo-2">
|
||||
<responsive-image src="sophie-jones-nightclub.png" class="img-fluid" alt="Sophie Jones" display-width-percentage="50"></responsive-image>
|
||||
</div>
|
||||
<div class="reckoning-desk-photo reckoning-desk-photo-3">
|
||||
<responsive-image src="the-alpha-flame-reckoning-cover.png" class="img-fluid" alt="Maggie Grant" display-width-percentage="50"></responsive-image>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="reckoning-desk-postit">
|
||||
<span>Maggie<br />Scandals,<br />tonight!</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="reckoning-casefile-page">
|
||||
<div class="casefile-stage">
|
||||
|
||||
<div class="casefile" id="caseFile">
|
||||
|
||||
<div class="casefile-rear">
|
||||
<img src="/images/webp/folder-rear.webp" alt="Case file interior" class="casefile-rear-img" />
|
||||
<div class="casefile-flap-shadow"></div>
|
||||
|
||||
<div class="casefile-inner">
|
||||
<div class="casefile-paper-stack">
|
||||
<div class="casefile-paper-stack-layer casefile-paper-stack-layer-1"></div>
|
||||
<div class="casefile-paper-stack-layer casefile-paper-stack-layer-2"></div>
|
||||
|
||||
<div class="casefile-content">
|
||||
<div class="casefile-panel active" data-tab="summary">
|
||||
<h2>Case Summary</h2>
|
||||
<p>
|
||||
They thought they were searching for the past. They didn’t realise the past was searching for them.
|
||||
</p>
|
||||
<p>
|
||||
As Maggie and Beth begin to piece together the fragments of their lives, the line between truth and danger begins to blur. Every answer leads to another question. Every step forward pulls them deeper into something neither of them fully understands.
|
||||
</p>
|
||||
<p>
|
||||
What began as a search for identity has uncovered a pattern… one that stretches back years, touching lives that were never meant to be connected.
|
||||
</p>
|
||||
<p>
|
||||
Witnesses are unreliable. Records are incomplete. And certain names keep appearing where they shouldn’t.
|
||||
</p>
|
||||
<p>
|
||||
Someone has been watching.
|
||||
</p>
|
||||
<p>
|
||||
And now, they’re getting closer.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="casefile-panel" data-tab="subjects">
|
||||
<h2>Subjects</h2>
|
||||
<p class="reckoning-case-subtitle">Primary persons connected to ongoing enquiries.</p>
|
||||
|
||||
<div class="reckoning-subjects-scroll">
|
||||
<div class="reckoning-subject-entry">
|
||||
<h3>SUBJECT: MAGGIE</h3>
|
||||
<p><strong>Age:</strong> Early 20s</p>
|
||||
<p><strong>Status:</strong> Civilian</p>
|
||||
<p><strong>Notes:</strong> Confident, observant, and increasingly proactive in ongoing events. Demonstrates strong protective instincts toward Beth and shows a marked tendency to pursue answers independently. Appears stronger than initial assessments suggested. Extent of involvement remains unclear.</p>
|
||||
</div>
|
||||
|
||||
<div class="reckoning-subject-entry">
|
||||
<h3>SUBJECT: BETH</h3>
|
||||
<p><strong>Age:</strong> Early 20s</p>
|
||||
<p><strong>Status:</strong> Victim / Person of Interest</p>
|
||||
<p><strong>Notes:</strong> Known to have suffered sustained trauma and coercive control. Holds key links to several individuals under observation. Emotional condition fragile, though recent behaviour suggests increasing resilience. May possess critical information, whether knowingly or otherwise.</p>
|
||||
</div>
|
||||
|
||||
<div class="reckoning-subject-entry">
|
||||
<h3>PERSON OF INTEREST: SIMON JONES</h3>
|
||||
<p><strong>Occupation:</strong> Business owner</p>
|
||||
<p><strong>Status:</strong> Under informal scrutiny</p>
|
||||
<p><strong>Notes:</strong> Name appears repeatedly across multiple lines of enquiry. Public profile respectable, though several associations remain unresolved. No direct action taken to date. Influence believed to extend further than officially recorded.</p>
|
||||
<p class="reckoning-redacted">Known associates: ███████████████</p>
|
||||
</div>
|
||||
|
||||
<div class="reckoning-subject-entry">
|
||||
<h3>PERSON OF INTEREST: SOPHIE JONES</h3>
|
||||
<p><strong>Age:</strong> Early 20s</p>
|
||||
<p><strong>Status:</strong> Associated party</p>
|
||||
<p><strong>Notes:</strong> Outwardly composed and cooperative, but behaviour raises concern. Presence noted around several incidents without formal connection being established. Considered potentially significant. Further attention advised.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="casefile-panel" data-tab="evidence">
|
||||
<h2>Evidence</h2>
|
||||
<p>Recovered fragments. Missing pieces. Unanswered questions.</p>
|
||||
</div>
|
||||
|
||||
<div class="casefile-panel" data-tab="notes">
|
||||
<h2>File Notes</h2>
|
||||
<p>Edition details, formats, release notes, and purchase information.</p>
|
||||
</div>
|
||||
|
||||
<div class="casefile-panel restricted-panel" data-tab="restricted">
|
||||
<h2>Restricted</h2>
|
||||
<p class="restricted-label">Authorised Access Only</p>
|
||||
<p>Bonus archive material is locked.</p>
|
||||
<a href="#buy-now" class="restricted-button">Unlock Access</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="casefile-tabs">
|
||||
<button type="button" class="casefile-tab active" data-tab="summary">Summary</button>
|
||||
<button type="button" class="casefile-tab" data-tab="subjects">Subjects</button>
|
||||
<button type="button" class="casefile-tab" data-tab="evidence">Evidence</button>
|
||||
<button type="button" class="casefile-tab" data-tab="notes">File Notes</button>
|
||||
<button type="button" class="casefile-tab restricted" data-tab="restricted">Restricted</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="casefile-front" id="caseFileFront" role="button" tabindex="0" aria-label="Open case file">
|
||||
<div class="casefile-front-face casefile-front-face-front">
|
||||
<img src="/images/webp/folder-front.webp" alt="Case file cover" class="casefile-front-img" />
|
||||
|
||||
<div class="casefile-front-overlay">
|
||||
<div class="casefile-stamp">
|
||||
RESTRICTED
|
||||
</div>
|
||||
|
||||
<div class="casefile-cover-text">
|
||||
<div class="casefile-cover-kicker">WEST MIDLANDS POLICE</div>
|
||||
<h1>ALPHA FLAME: RECKONING</h1>
|
||||
<p>Case Ref: AFR-1983-06</p>
|
||||
<p>Status: Active Investigation</p>
|
||||
</div>
|
||||
|
||||
<div class="casefile-open-hint">Click to open file</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="casefile-front-face casefile-front-face-back">
|
||||
<img src="/images/webp/folder-front-inside.webp" alt="" class="casefile-front-img casefile-front-img-back" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
@section BackgroundVideo {
|
||||
<div></div>
|
||||
}
|
||||
|
||||
@section CSS {
|
||||
<link href="~/css/reckoning.css" rel="stylesheet" />
|
||||
}
|
||||
|
||||
@section Scripts {
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const caseFile = document.getElementById("caseFile");
|
||||
const frontCover = document.getElementById("caseFileFront");
|
||||
const tabs = caseFile.querySelectorAll(".casefile-tab");
|
||||
const panels = caseFile.querySelectorAll(".casefile-panel");
|
||||
const images = caseFile.querySelectorAll("img");
|
||||
|
||||
let loadedCount = 0;
|
||||
let assetsReady = false;
|
||||
let openTimer = null;
|
||||
let isOpening = false;
|
||||
let hasEnteredView = false;
|
||||
|
||||
function openCaseFile() {
|
||||
if (!assetsReady || isOpening || caseFile.classList.contains("open")) {
|
||||
return;
|
||||
}
|
||||
|
||||
isOpening = true;
|
||||
caseFile.classList.add("revealed");
|
||||
caseFile.classList.add("open");
|
||||
|
||||
if (openTimer) {
|
||||
clearTimeout(openTimer);
|
||||
openTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
function startAutoOpenTimer() {
|
||||
if (!assetsReady || hasEnteredView === false || openTimer || caseFile.classList.contains("open")) {
|
||||
return;
|
||||
}
|
||||
|
||||
openTimer = setTimeout(() => {
|
||||
openCaseFile();
|
||||
}, 10000);
|
||||
}
|
||||
|
||||
function onAssetLoaded() {
|
||||
loadedCount++;
|
||||
|
||||
if (loadedCount === images.length) {
|
||||
assetsReady = true;
|
||||
caseFile.classList.add("assets-ready");
|
||||
|
||||
setTimeout(() => {
|
||||
caseFile.classList.add("ready");
|
||||
}, 250);
|
||||
|
||||
startAutoOpenTimer();
|
||||
}
|
||||
}
|
||||
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting && !hasEnteredView) {
|
||||
hasEnteredView = true;
|
||||
startAutoOpenTimer();
|
||||
observer.disconnect();
|
||||
}
|
||||
});
|
||||
}, {
|
||||
threshold: 0.35
|
||||
});
|
||||
|
||||
observer.observe(caseFile);
|
||||
|
||||
images.forEach(img => {
|
||||
if (img.complete) {
|
||||
onAssetLoaded();
|
||||
} else {
|
||||
img.addEventListener("load", onAssetLoaded, { once: true });
|
||||
img.addEventListener("error", onAssetLoaded, { once: true });
|
||||
}
|
||||
});
|
||||
|
||||
frontCover.addEventListener("click", function () {
|
||||
openCaseFile();
|
||||
});
|
||||
|
||||
frontCover.addEventListener("keydown", function (e) {
|
||||
if (e.key === "Enter" || e.key === " ") {
|
||||
e.preventDefault();
|
||||
openCaseFile();
|
||||
}
|
||||
});
|
||||
|
||||
tabs.forEach(tab => {
|
||||
tab.addEventListener("click", function () {
|
||||
const tabName = this.dataset.tab;
|
||||
|
||||
tabs.forEach(t => t.classList.remove("active"));
|
||||
panels.forEach(p => p.classList.remove("active"));
|
||||
|
||||
this.classList.add("active");
|
||||
|
||||
const targetPanel = caseFile.querySelector(`.casefile-panel[data-tab="${tabName}"]`);
|
||||
if (targetPanel) {
|
||||
targetPanel.classList.add("active");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
}
|
||||
287
CatherineLynwood/Views/Reckoning/Index_old.cshtml
Normal file
287
CatherineLynwood/Views/Reckoning/Index_old.cshtml
Normal file
@ -0,0 +1,287 @@
|
||||
@model CatherineLynwood.Models.TitlePageViewModel
|
||||
|
||||
@{
|
||||
var releaseDate = new DateTime(2026, 4, 1);
|
||||
ViewData["Title"] = $"The Alpha Flame: Reckoning — Pre-Release (out {releaseDate: d MMMM yyyy})";
|
||||
}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item"><a asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li class="breadcrumb-item"><a asp-controller="TheAlphaFlame" asp-action="Index">The Alpha Flame</a></li>
|
||||
<li class="breadcrumb-item active" aria-current="page">Reckoning</li>
|
||||
</ol>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- HERO: Cover + Coming Soon panel -->
|
||||
<section class="mb-4">
|
||||
<div class="row g-3 align-items-stretch">
|
||||
|
||||
<!-- Book Cover -->
|
||||
<div class="col-lg-5 d-flex">
|
||||
<div class="card character-card h-100 flex-fill" id="cover-card">
|
||||
<responsive-image src="the-alpha-flame-reckoning-cover.png"
|
||||
class="card-img-top"
|
||||
alt="The Alpha Flame: Reckoning book cover"
|
||||
display-width-percentage="50"></responsive-image>
|
||||
<div class="card-body border-top border-3 border-dark">
|
||||
<h3 class="card-title h5 mb-1">The Alpha Flame: <span class="fw-light">Reckoning</span></h3>
|
||||
<p class="card-text mb-0">
|
||||
Book 2 of the Alpha Flame trilogy.
|
||||
The danger didn’t end with <em>Discovery</em>. It got smarter.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Launch panel -->
|
||||
<div class="col-lg-7 d-flex">
|
||||
<div class="card character-card h-100 flex-fill" id="hero-media-card">
|
||||
<div class="card-body d-flex flex-column">
|
||||
|
||||
<div>
|
||||
|
||||
<h3 class="card-title">The Alpha Flame: <span class="fw-light">Reckoning</span></h3>
|
||||
|
||||
<p class="fst-italic">
|
||||
Two flames, once divided, now burn as one. Bound by blood, scarred by secrets, they rise to face the fire that made them.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
After everything they survived in <em>Discovery</em>, Maggie and Beth should finally be free.
|
||||
Instead, the nightmares follow them into daylight, and the past starts tugging at them with intent.
|
||||
Beth is still rebuilding herself piece by piece. Maggie is trying to hold everything together.
|
||||
And somewhere in the background, the people who benefitted from Beth’s silence are quietly noticing that she is no longer alone.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3"><i class="fa-solid fa-fire-flame-curved me-2"></i>The search for truth</h4>
|
||||
|
||||
<p>
|
||||
The girls return to the fragments their mother left behind: the memory tin, the poem, and the wedding photograph.
|
||||
What once felt like sentimental debris starts to look like a trail. A puzzle built on purpose.
|
||||
Maggie, driven and sharp, refuses to accept that their mother’s life ended without meaning.
|
||||
Beth, fragile but braver than she realises, wants answers even if they hurt.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Their search pulls them toward Wales, toward names and places their mother never explained, and toward people who remember her
|
||||
not as a ghost story, but as a living woman with fire in her bones.
|
||||
The closer they get, the more they realise they are not the only ones searching.
|
||||
</p>
|
||||
|
||||
<div class="alert alert-secondary mt-4" role="alert">
|
||||
<div class="d-flex">
|
||||
<div class="me-3">
|
||||
<i class="fa-solid fa-triangle-exclamation"></i>
|
||||
</div>
|
||||
<div>
|
||||
<strong>Things escalate fast.</strong> A familiar car appears. Old fear becomes new danger. Running stops being a metaphor.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Call to action row -->
|
||||
<div class="d-flex gap-3 flex-wrap">
|
||||
@* <a asp-controller="TheAlphaFlame" asp-action="MailingList" class="btn btn-dark">
|
||||
Notify me on release
|
||||
</a> *@
|
||||
<a asp-controller="Discovery" asp-action="Index" class="btn btn-outline-dark">
|
||||
Start with Discovery
|
||||
</a>
|
||||
<a asp-controller="TheAlphaFlame" asp-action="Index" class="btn btn-outline-secondary">
|
||||
Explore the trilogy
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Small continuity note -->
|
||||
<div class="mt-3 small text-muted">
|
||||
<strong>Tip:</strong> <em>Reckoning</em> follows directly after <em>Discovery</em>.
|
||||
If you’re new to the series, start there for maximum emotional damage.
|
||||
</div>
|
||||
|
||||
@await Component.InvokeAsync("BuyPanel", new { ISO2 = Model.UserIso2, Src = Model.Src, Title = Model.Title })
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Synopsis (pre-release: shorter, tighter) -->
|
||||
<section id="synopsis" class="mb-4">
|
||||
<div class="card character-card text-white"
|
||||
style="background: url('/images/webp/bridge-over-the-river-960.webp'); background-position: center; background-size: cover;">
|
||||
<div class="card-header">
|
||||
<h2 class="card-title h1 mb-0">The Alpha Flame: <span class="fw-light">Reckoning</span></h2>
|
||||
<p class="mb-0">When the past returns, it doesn’t knock. It takes.</p>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
|
||||
<h4 class="mb-3"><i class="fa-solid fa-car-burst me-2"></i>The watcher returns</h4>
|
||||
|
||||
<p class="card-text">
|
||||
Back in Birmingham, the threat stops lurking and starts moving.
|
||||
A blue Ford Escort appears outside a safe doorstep and turns a tense conversation into a race for survival.
|
||||
The girls flee through back roads and service lanes, only to be hunted in the open, the Escort glued to their rear bumper like fate.
|
||||
It is not random. It is not a coincidence. Someone has been sent.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
Worse still, the fallout reaches the police. Mrs Patterson, the neighbour who knows too much, turns up dead.
|
||||
Graham arrives with questions he does not want to ask, and DI Baker arrives with the kind of presence that poisons a room.
|
||||
The message is clear: even authority cannot be assumed safe.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3"><i class="fad fa-mountain me-2"></i>Wales, family, and the key</h4>
|
||||
|
||||
<p class="card-text">
|
||||
Wales offers a temporary illusion of peace: wide skies, old farms, warm kitchens, and people who speak your mother’s name
|
||||
like she mattered. For the first time, Beth and Maggie experience something dangerously close to ordinary.
|
||||
But the ordinary does not last.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
The poem changes. Literally. A second version appears, with new stanzas that reframe everything.
|
||||
What the girls believed was a single trail is revealed as a deliberate split: one path for the wrong eyes,
|
||||
another for the right ones. Their mother planned for predators. She built decoys.
|
||||
And she hid the real direction in plain sight, waiting for the day her daughters would be ready to understand it.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
A deposit box key is found, tucked away where it was never supposed to be noticed.
|
||||
Now the question is not whether their mother left something behind, but what she was protecting, and from whom.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3"><i class="fad fa-user-secret me-2"></i>Names that change everything</h4>
|
||||
|
||||
<p class="card-text">
|
||||
Answers arrive in the worst way: through memory, confession, and people who were there when the damage began.
|
||||
Gareth finally tells the story of Annie, Elen, and the night the trap was set.
|
||||
He names the man at the centre of it all: <strong>Simon Jones</strong>.
|
||||
Not a faceless monster, but a real figure with reach, money, and a network built on fear.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
The revelation detonates Beth’s fragile stability. The past is not behind her.
|
||||
It is connected to everything still happening now, and to Sophie’s world in Birmingham.
|
||||
The girls are not just searching for identity anymore.
|
||||
They are standing on a fault line that runs straight through power, crime, and corruption.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3">The boxes open</h4>
|
||||
|
||||
<p class="card-text">
|
||||
When the second deposit box finally opens, it is not comfort inside. It is evidence.
|
||||
Their mother left them a ledger of real accounts, receipts, photos, recordings, and a copied key tied to Sophie’s safe.
|
||||
It is a package designed to destroy Simon Jones, but it comes with a brutal catch:
|
||||
the final identities, the protected names, the ones behind the coded initials, are stored elsewhere,
|
||||
locked in Sophie’s personal safe in a red case.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
Their mother did not leave them a neat answer.
|
||||
She left them a weapon, and a warning.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3"><i class="fad fa-heart me-2"></i>The reckoning hits home</h4>
|
||||
|
||||
<p class="card-text">
|
||||
As the net tightens, the violence stops being distant. It becomes intimate.
|
||||
During a final clash, Rob steps into the line of fire for Maggie.
|
||||
In the silence of a ruined place, he bleeds out in her arms, and the future they were building collapses in seconds.
|
||||
His death is not just loss. It is consequence.
|
||||
It is the cost of standing beside someone the darkness wants back.
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
Grief does not pause the danger. If anything, it sharpens it.
|
||||
Maggie and Beth are no longer just survivors.
|
||||
They are holding proof that could bring down an empire, and every powerful person connected to it.
|
||||
</p>
|
||||
|
||||
<hr class="my-4" />
|
||||
|
||||
<h4 class="mb-3"><i class="fad fa-door-open me-2"></i>The knock</h4>
|
||||
|
||||
<p class="card-text">
|
||||
The story closes with the world catching up.
|
||||
The authorities circle. Baker’s shadow stretches.
|
||||
And just when it seems the girls might get a breath, duty arrives on the doorstep.
|
||||
The past has claimed another body, and someone needs a suspect.
|
||||
The final beat lands exactly as it should:
|
||||
a knock that changes everything, and the unmistakable sense that what comes next will not be gentle.
|
||||
</p>
|
||||
|
||||
|
||||
<div class="mt-3 d-flex gap-2 flex-wrap">
|
||||
<a asp-controller="Discovery" asp-action="Extras" class="btn btn-outline-light btn-sm">
|
||||
Unlock Discovery extras
|
||||
</a>
|
||||
<a asp-controller="TheAlphaFlame" asp-action="Index" class="btn btn-outline-light btn-sm">
|
||||
The trilogy overview
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Pre-release: No fake previews / no empty reviews -->
|
||||
@* <section class="mt-4">
|
||||
<div class="card character-card">
|
||||
<div class="card-body">
|
||||
<h2 class="h5 fw-bold mb-2">Preview content</h2>
|
||||
<p class="mb-3">
|
||||
Previews, sample chapters, and reader reviews will appear here once they’re ready.
|
||||
Until then, <em>Discovery</em> is available now.
|
||||
</p>
|
||||
<div class="d-flex gap-2 flex-wrap">
|
||||
<a asp-controller="Discovery" asp-action="Index" class="btn btn-dark">Explore Discovery</a>
|
||||
<a asp-controller="Discovery" asp-action="Reviews" class="btn btn-outline-dark">See Discovery reviews</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section> *@
|
||||
|
||||
@section Scripts {
|
||||
<!-- Plyr for audio (only needed if you keep the audio block) -->
|
||||
<script>
|
||||
const player = new Plyr('audio');
|
||||
</script>
|
||||
}
|
||||
|
||||
@section Meta {
|
||||
<MetaTag meta-title="The Alpha Flame: Reckoning by Catherine Lynwood (Pre-Release)"
|
||||
meta-description="Reckoning is the upcoming second book in The Alpha Flame trilogy. 1983 Birmingham. Consequences, secrets, and survival… Coming 1 April 2026."
|
||||
meta-keywords="The Alpha Flame Reckoning, Catherine Lynwood, 1983 novel, Birmingham fiction, suspense fiction, family secrets, psychological crime, historical drama"
|
||||
meta-author="Catherine Lynwood"
|
||||
meta-url="https://www.catherinelynwood.com/the-alpha-flame/reckoning"
|
||||
meta-image="https://www.catherinelynwood.com/images/webp/the-alpha-flame-reckoning-cover-1200.webp"
|
||||
meta-image-png="https://www.catherinelynwood.com/images/the-alpha-flame-reckoning-cover.png"
|
||||
meta-image-alt="The Alpha Flame: Reckoning by Catherine Lynwood"
|
||||
og-site-name="Catherine Lynwood - The Alpha Flame: Reckoning"
|
||||
article-published-time="@new DateTime(2026, 04, 01)"
|
||||
article-modified-time="@DateTime.UtcNow"
|
||||
twitter-card-type="summary_large_image"
|
||||
twitter-site-handle="@@CathLynwood"
|
||||
twitter-creator-handle="@@CathLynwood" />
|
||||
}
|
||||
@ -6,20 +6,33 @@
|
||||
@RenderSection("Meta", required: false)
|
||||
}
|
||||
|
||||
@section BackgroundVideo {
|
||||
<div id="background-wrapper">
|
||||
<div class="video-background">
|
||||
<video id="siteBackgroundVideo"
|
||||
autoplay
|
||||
muted
|
||||
loop
|
||||
playsinline
|
||||
preload="none">
|
||||
<!-- Source will be injected by JS -->
|
||||
</video>
|
||||
<div class="video-overlay"></div>
|
||||
@section CSS {
|
||||
@RenderSection("CSS", required: false)
|
||||
}
|
||||
|
||||
@if (IsSectionDefined("BackgroundVideo"))
|
||||
{
|
||||
@section BackgroundVideo {
|
||||
@RenderSection("BackgroundVideo", required: false)
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@section BackgroundVideo {
|
||||
<div id="background-wrapper">
|
||||
<div class="video-background">
|
||||
<video id="siteBackgroundVideo"
|
||||
autoplay
|
||||
muted
|
||||
loop
|
||||
playsinline
|
||||
preload="none">
|
||||
<!-- Source will be injected by JS -->
|
||||
</video>
|
||||
<div class="video-overlay"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
||||
@RenderBody()
|
||||
|
||||
3
CatherineLynwood/Views/Reckoning/_ReckoningBuy.cshtml
Normal file
3
CatherineLynwood/Views/Reckoning/_ReckoningBuy.cshtml
Normal file
@ -0,0 +1,3 @@
|
||||
@model CatherineLynwood.Models.TitlePageViewModel
|
||||
|
||||
@await Component.InvokeAsync("BuyPanel", new { ISO2 = Model.UserIso2, Src = Model.Src, Title = Model.Title })
|
||||
105
CatherineLynwood/Views/Reckoning/_ReckoningEvidence.cshtml
Normal file
105
CatherineLynwood/Views/Reckoning/_ReckoningEvidence.cshtml
Normal file
@ -0,0 +1,105 @@
|
||||
@model CatherineLynwood.Models.TitlePageViewModel
|
||||
|
||||
<h2>Evidence</h2>
|
||||
<p class="casefile-evidence-intro">
|
||||
Recovered materials connected to the case. Several items remain incomplete, damaged, or subject to restricted review.
|
||||
</p>
|
||||
|
||||
<div class="casefile-evidence-list">
|
||||
|
||||
<section class="casefile-evidence-item casefile-evidence-item-featured">
|
||||
<div class="casefile-evidence-item-header">
|
||||
<div class="casefile-evidence-item-id">Item 01</div>
|
||||
<h3>Audio Recordings</h3>
|
||||
</div>
|
||||
|
||||
<div class="casefile-evidence-media">
|
||||
<button type="button"
|
||||
class="casefile-audio-trigger"
|
||||
data-audio-target="evidenceTapeAudio"
|
||||
aria-label="Play recovered tape audio">
|
||||
|
||||
<span class="casefile-audio-image-wrapper">
|
||||
<responsive-image src="cassette-tape.png"
|
||||
class="casefile-evidence-image"
|
||||
alt="Cassette tape evidence in plastic case"
|
||||
display-width-percentage="30"></responsive-image>
|
||||
|
||||
<span class="casefile-audio-overlay"></span>
|
||||
</span>
|
||||
|
||||
</button>
|
||||
|
||||
<audio id="evidenceTapeAudio" preload="auto">
|
||||
<source src="/audio/cassette-tape.mp3" type="audio/mpeg" />
|
||||
</audio>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Recovered from secured deposit storage. Handwritten labels inconsistent. Audio quality poor in places.
|
||||
</p>
|
||||
<p>
|
||||
Fragmented conversation captured between unidentified voices. Repeated references to money, locations, and an unnamed female subject.
|
||||
</p>
|
||||
<p class="casefile-evidence-note">
|
||||
Transcript not included.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="casefile-evidence-item">
|
||||
<div class="casefile-evidence-item-header">
|
||||
<div class="casefile-evidence-item-id">Item 02</div>
|
||||
<h3>Deposit Record Extract</h3>
|
||||
</div>
|
||||
|
||||
<div class="casefile-evidence-media">
|
||||
<responsive-image src="bank-book.png"
|
||||
class="casefile-evidence-image"
|
||||
alt="Deposit book page containing an encoded number"
|
||||
display-width-percentage="30"></responsive-image>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Final page of deposit record book. Contains handwritten notation believed to reference a coded box number.
|
||||
</p>
|
||||
<p>
|
||||
Meaning not immediately apparent. Pattern only becomes visible when cross-referenced with accompanying material.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="casefile-evidence-item">
|
||||
<div class="casefile-evidence-item-header">
|
||||
<div class="casefile-evidence-item-id">Item 03</div>
|
||||
<h3>Handwritten Note</h3>
|
||||
</div>
|
||||
|
||||
<div class="casefile-evidence-paperclip">
|
||||
<responsive-image src="blackmail-note.png"
|
||||
class="casefile-evidence-image"
|
||||
alt="Partially folded handwritten note"
|
||||
display-width-percentage="30"></responsive-image>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Small folded note recovered during follow-up enquiries. Believed to have been used to direct movement between locations.
|
||||
</p>
|
||||
<p>
|
||||
Full wording withheld from this file. Relevance considered significant.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="casefile-evidence-item">
|
||||
<div class="casefile-evidence-item-header">
|
||||
<div class="casefile-evidence-item-id">Item 04</div>
|
||||
<h3>Redacted Document Extract</h3>
|
||||
</div>
|
||||
|
||||
<div class="casefile-redacted-block">
|
||||
<p>██████████████████████████████████████</p>
|
||||
<p>██████████████████ ███████████████████</p>
|
||||
<p>Reference to individual removed from file.</p>
|
||||
<p>Access restricted pending review.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
12
CatherineLynwood/Views/Reckoning/_ReckoningRestricted.cshtml
Normal file
12
CatherineLynwood/Views/Reckoning/_ReckoningRestricted.cshtml
Normal file
@ -0,0 +1,12 @@
|
||||
@model CatherineLynwood.Models.TitlePageViewModel
|
||||
|
||||
<h2>Restricted</h2>
|
||||
<p class="restricted-label">Authorised Access Only</p>
|
||||
<p>Bonus archive material is locked.</p>
|
||||
<p>
|
||||
When you've purchased an edition of The Alpha Flame: Reckoning come back to gain access to all sort of hidden extras.
|
||||
</p>
|
||||
<p>
|
||||
New material is being added all the time.
|
||||
</p>
|
||||
<a asp-action="Extras" class="restricted-button">Unlock Access</a>
|
||||
89
CatherineLynwood/Views/Reckoning/_ReckoningReview.cshtml
Normal file
89
CatherineLynwood/Views/Reckoning/_ReckoningReview.cshtml
Normal file
@ -0,0 +1,89 @@
|
||||
@model CatherineLynwood.Models.TitlePageViewModel
|
||||
@{
|
||||
bool showReviews = Model.Reviews.Items.Any();
|
||||
}
|
||||
|
||||
<h2>External Review</h2>
|
||||
|
||||
<p>
|
||||
Supplementary observations and external responses filed in relation to this case.
|
||||
</p>
|
||||
<p>
|
||||
Public reaction remains limited but notable. The following extract has been selected for inclusion.
|
||||
</p>
|
||||
|
||||
@if (showReviews)
|
||||
{
|
||||
var top = Model.Reviews.Items
|
||||
.Where(x => x.RatingValue == 5)
|
||||
.OrderByDescending(y => y.DatePublished)
|
||||
.First();
|
||||
|
||||
var fullStars = (int)Math.Floor(top.RatingValue);
|
||||
var hasHalfStar = top.RatingValue - fullStars >= 0.5;
|
||||
var emptyStars = 5 - fullStars - (hasHalfStar ? 1 : 0);
|
||||
var reviewDate = top.DatePublished.ToString("d MMMM yyyy");
|
||||
|
||||
<section class="casefile-reviews">
|
||||
<h3 class="casefile-section-heading">External Commentary</h3>
|
||||
|
||||
<div class="casefile-review-entry">
|
||||
<div class="casefile-review-stars" aria-label="@top.RatingValue out of 5 stars">
|
||||
@for (int i = 0; i < fullStars; i++)
|
||||
{
|
||||
<i class="fad fa-star"></i>
|
||||
}
|
||||
@if (hasHalfStar)
|
||||
{
|
||||
<i class="fad fa-star-half-alt"></i>
|
||||
}
|
||||
@for (int i = 0; i < emptyStars; i++)
|
||||
{
|
||||
<i class="fad fa-star casefile-review-star-empty"></i>
|
||||
}
|
||||
</div>
|
||||
|
||||
<blockquote class="casefile-review-body">
|
||||
@Html.Raw(top.ReviewBody)
|
||||
</blockquote>
|
||||
|
||||
<p class="casefile-review-source">
|
||||
<strong>@top.AuthorName</strong> on
|
||||
@if (string.IsNullOrEmpty(top.URL))
|
||||
{
|
||||
<span>@top.SiteName</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<a href="@top.URL" target="_blank" rel="noopener noreferrer">@top.SiteName</a>
|
||||
}
|
||||
<span class="casefile-review-date">, @reviewDate</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@if (Model.Reviews.Items.Count > 1)
|
||||
{
|
||||
<div class="casefile-review-more">
|
||||
<a asp-action="Reviews" class="casefile-inline-link">Read more reviews</a>
|
||||
</div>
|
||||
}
|
||||
</section>
|
||||
}
|
||||
else
|
||||
{
|
||||
<section class="casefile-reviews">
|
||||
<h3 class="casefile-section-heading">External Commentary</h3>
|
||||
<p>
|
||||
No reader responses have yet been added to this file.
|
||||
</p>
|
||||
</section>
|
||||
}
|
||||
|
||||
<p class="casefile-notes-meta">
|
||||
<strong>Classification:</strong> Circulation ongoing<br />
|
||||
<strong>Reference:</strong> AF-R/02
|
||||
</p>
|
||||
|
||||
<p class="casefile-notes-margin">
|
||||
<em>Margin note:</em> “Keep watching this one.”
|
||||
</p>
|
||||
80
CatherineLynwood/Views/Reckoning/_ReckoningSubjects.cshtml
Normal file
80
CatherineLynwood/Views/Reckoning/_ReckoningSubjects.cshtml
Normal file
@ -0,0 +1,80 @@
|
||||
@model CatherineLynwood.Models.TitlePageViewModel
|
||||
|
||||
<h2>Subjects</h2>
|
||||
<p class="reckoning-case-subtitle">Primary persons connected to ongoing enquiries.</p>
|
||||
|
||||
<div class="reckoning-subjects-scroll">
|
||||
<div class="reckoning-subject-entry">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<responsive-image src="maggie-grant-36.png"
|
||||
class="img-polaroid"
|
||||
alt="Maggie Grant"
|
||||
display-width-percentage="30"></responsive-image>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<h3>SUBJECT: GRANT, MAGGIE</h3>
|
||||
<p><strong>AKA:</strong> Fletcher, Grace</p>
|
||||
<p><strong>DoB:</strong> 01/09/1965</p>
|
||||
</div>
|
||||
</div>
|
||||
<p><strong>Status:</strong> Victim</p>
|
||||
<p><strong>Notes:</strong> Confident, observant, and increasingly proactive in ongoing events. Demonstrates strong protective instincts toward Beth and shows a marked tendency to pursue answers independently. Appears stronger than initial assessments suggested. Extent of involvement remains unclear.</p>
|
||||
</div>
|
||||
|
||||
<div class="reckoning-subject-entry">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<responsive-image src="beth-6.png"
|
||||
class="img-polaroid"
|
||||
alt="Beth Fletcher"
|
||||
display-width-percentage="30"></responsive-image>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<h3>SUBJECT: FLETCHER, BETH</h3>
|
||||
<p><strong>DoB:</strong> 31/08/1965</p>
|
||||
</div>
|
||||
</div>
|
||||
<p><strong>Status:</strong> Victim</p>
|
||||
<p><strong>Notes:</strong> Known to have suffered sustained trauma and coercive control. Holds key links to several individuals under observation. Emotional condition fragile, though recent behaviour suggests increasing resilience. May possess critical information, whether knowingly or otherwise.</p>
|
||||
</div>
|
||||
|
||||
<div class="reckoning-subject-entry">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<responsive-image src="simon-jones-mug-shot.png"
|
||||
class="img-polaroid"
|
||||
alt="Simon Jones"
|
||||
display-width-percentage="30"></responsive-image>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<h3>PERSON OF INTEREST: JONES, SIMON</h3>
|
||||
<p><strong>DoB:</strong> 15/010/1935</p>
|
||||
<p><strong>Occupation:</strong> Business owner</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p><strong>Status:</strong> Under informal scrutiny</p>
|
||||
<p><strong>Notes:</strong> Name appears repeatedly across multiple lines of enquiry. Public profile respectable, though several associations remain unresolved. No direct action taken to date. Influence believed to extend further than officially recorded.</p>
|
||||
<p class="reckoning-redacted">Known associates: ███████████████</p>
|
||||
</div>
|
||||
|
||||
<div class="reckoning-subject-entry">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<responsive-image src="sophie-jones-street-shot.png"
|
||||
class="img-polaroid"
|
||||
alt="Sophie Jones"
|
||||
display-width-percentage="30"></responsive-image>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<h3>PERSON OF INTEREST: JONES, SOPHIE</h3>
|
||||
<p><strong>DoB:</strong> 07/03/1962</p>
|
||||
<p><strong>Status:</strong> Under investigation</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p><strong>Notes:</strong> Outwardly composed and cooperative, but behaviour raises concern. Presence noted around several incidents without formal connection being established. Considered potentially significant. Further attention advised.</p>
|
||||
<p class="reckoning-redacted">Known associates: Harris, Richard Arthur</p>
|
||||
</div>
|
||||
</div>
|
||||
21
CatherineLynwood/Views/Reckoning/_ReckoningSummary.cshtml
Normal file
21
CatherineLynwood/Views/Reckoning/_ReckoningSummary.cshtml
Normal file
@ -0,0 +1,21 @@
|
||||
@model CatherineLynwood.Models.TitlePageViewModel
|
||||
|
||||
<h2>Case Summary</h2>
|
||||
<p>
|
||||
They thought they were searching for the past. They didn’t realise the past was searching for them.
|
||||
</p>
|
||||
<p>
|
||||
As Maggie and Beth begin to piece together the fragments of their lives, the line between truth and danger begins to blur. Every answer leads to another question. Every step forward pulls them deeper into something neither of them fully understands.
|
||||
</p>
|
||||
<p>
|
||||
What began as a search for identity has uncovered a pattern… one that stretches back years, touching lives that were never meant to be connected.
|
||||
</p>
|
||||
<p>
|
||||
Witnesses are unreliable. Records are incomplete. And certain names keep appearing where they shouldn’t.
|
||||
</p>
|
||||
<p>
|
||||
Someone has been watching.
|
||||
</p>
|
||||
<p>
|
||||
And now, they’re getting closer.
|
||||
</p>
|
||||
@ -0,0 +1,55 @@
|
||||
@model CatherineLynwood.Models.BuyPanelViewModel
|
||||
|
||||
<div id="buyBox" class="buybox-casefile-page">
|
||||
|
||||
<div class="buybox-casefile-page-header">
|
||||
<h2>Acquisition Options</h2>
|
||||
|
||||
<p class="buybox-casefile-country">
|
||||
<img class="buybox-casefile-flag"
|
||||
alt=""
|
||||
width="20"
|
||||
height="14"
|
||||
src="@Model.FlagUrl" />
|
||||
<span>Best options for @Model.ISO2</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="buybox-casefile-groups">
|
||||
@foreach (var group in Model.Groups.OrderBy(x => x.DisplayOrder))
|
||||
{
|
||||
<section class="buybox-casefile-group">
|
||||
@if (string.IsNullOrWhiteSpace(group.Message))
|
||||
{
|
||||
<h3 class="buybox-casefile-group-title">@group.GroupName</h3>
|
||||
}
|
||||
else
|
||||
{
|
||||
<h3 class="buybox-casefile-group-title">@group.GroupName</h3>
|
||||
<p class="buybox-casefile-group-message">
|
||||
@Html.Raw(group.Message)
|
||||
</p>
|
||||
}
|
||||
|
||||
<div class="buybox-casefile-links">
|
||||
@foreach (var link in group.Links.OrderBy(x => x.Text))
|
||||
{
|
||||
<a class="buybox-casefile-link"
|
||||
href="@link.Target"
|
||||
ping="@($"/track/click?slug={link.Slug}&src={Model.Src}")"
|
||||
rel="nofollow noindex">
|
||||
<span class="buybox-casefile-link-main">
|
||||
<span class="buybox-casefile-link-text">@Html.Raw(link.Icon) @link.Text</span>
|
||||
</span>
|
||||
|
||||
@if (!string.IsNullOrWhiteSpace(link.Price))
|
||||
{
|
||||
<span class="buybox-casefile-price">@link.Price</span>
|
||||
}
|
||||
</a>
|
||||
}
|
||||
</div>
|
||||
</section>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@ -127,6 +127,9 @@
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-primary" asp-area="" asp-controller="Home" asp-action="VerosticGenre">The Verostic Genre</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-primary" asp-area="" asp-controller="IndieAuthor" asp-action="index">The Indie Author Guide</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="navbar-nav">
|
||||
@ -142,8 +145,8 @@
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<div class="container-lg" style="margin-top: 90px;">
|
||||
<main role="main" class="pb-3">
|
||||
<div class="container-lg" style="margin-top: 70px;">
|
||||
<main role="main" class="p-0">
|
||||
@RenderBody()
|
||||
</main>
|
||||
</div>
|
||||
|
||||
39
CatherineLynwood/Views/Shared/_LayoutDiscovery.cshtml
Normal file
39
CatherineLynwood/Views/Shared/_LayoutDiscovery.cshtml
Normal file
@ -0,0 +1,39 @@
|
||||
@{
|
||||
Layout = "/Views/Shared/_Layout.cshtml";
|
||||
}
|
||||
|
||||
@section CSS{
|
||||
<style>
|
||||
.video-overlay {
|
||||
background-color: rgba(13, 202, 240, 0.2);
|
||||
}
|
||||
</style>
|
||||
|
||||
}
|
||||
|
||||
@section Meta {
|
||||
@RenderSection("Meta", required: false)
|
||||
}
|
||||
|
||||
|
||||
@section BackgroundVideo {
|
||||
<div id="background-wrapper">
|
||||
<div class="video-background">
|
||||
<video id="siteBackgroundVideo"
|
||||
autoplay
|
||||
muted
|
||||
loop
|
||||
playsinline
|
||||
preload="none">
|
||||
<!-- Source will be injected by JS -->
|
||||
</video>
|
||||
<div class="video-overlay"></div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@RenderBody()
|
||||
|
||||
@section Scripts {
|
||||
@RenderSection("Scripts", required: false)
|
||||
}
|
||||
29
CatherineLynwood/Views/Shared/_LayoutReckoning.cshtml
Normal file
29
CatherineLynwood/Views/Shared/_LayoutReckoning.cshtml
Normal file
@ -0,0 +1,29 @@
|
||||
@{
|
||||
Layout = "/Views/Shared/_Layout.cshtml";
|
||||
}
|
||||
|
||||
@section Meta {
|
||||
@RenderSection("Meta", required: false)
|
||||
}
|
||||
|
||||
@section BackgroundVideo {
|
||||
<div id="background-wrapper">
|
||||
<div class="video-background">
|
||||
<video id="siteBackgroundVideo"
|
||||
autoplay
|
||||
muted
|
||||
loop
|
||||
playsinline
|
||||
preload="none">
|
||||
<!-- Source will be injected by JS -->
|
||||
</video>
|
||||
<div class="video-overlay"></div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@RenderBody()
|
||||
|
||||
@section Scripts {
|
||||
@RenderSection("Scripts", required: false)
|
||||
}
|
||||
@ -1,8 +1,32 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=localhost;Database=CatherineLynwood;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=false;"
|
||||
},
|
||||
"Smtp": {
|
||||
"Host": "smtpout.secureserver.net",
|
||||
"Port": "587",
|
||||
"Sender": "your-email@catherinelynwood.com",
|
||||
"Username": "catherine@catherinelynwood.com",
|
||||
"Password": "ryaN9982?"
|
||||
},
|
||||
"AudioSecurity": {
|
||||
"HmacSecretKey": "SG.7xaVKHzRQsS5os1IJUJZ2Q.2osFDJIRkjlDl3eM05uZ9R1IUA6Wv",
|
||||
"TokenExpirySeconds": 86400
|
||||
},
|
||||
"ApiKeys": {
|
||||
"BlogPost": "d73dbc3429dh3ycn79f3dfc0nfhyu98q"
|
||||
},
|
||||
"IndexNow": {
|
||||
"ApiKey": "cc6ff72c3d1a48d0b0b7c2c2b543f15f"
|
||||
},
|
||||
"AbTest": {
|
||||
"DiscoveryBPercent": 50
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=localhost;Database=CatherineLynwood;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=false;"
|
||||
"DefaultConnection": "Server=localhost;Database=CatherineLynwood;User Id=web;Password=ryaN9982?;MultipleActiveResultSets=true;Encrypt=false;TrustServerCertificate=true;"
|
||||
},
|
||||
"Smtp": {
|
||||
"Host": "smtpout.secureserver.net",
|
||||
|
||||
13
CatherineLynwood/dotnet-tools.json
Normal file
13
CatherineLynwood/dotnet-tools.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"version": 1,
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"dotnet-ef": {
|
||||
"version": "10.0.3",
|
||||
"commands": [
|
||||
"dotnet-ef"
|
||||
],
|
||||
"rollForward": false
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
CatherineLynwood/wwwroot/audio/cassette-tape.mp3
Normal file
BIN
CatherineLynwood/wwwroot/audio/cassette-tape.mp3
Normal file
Binary file not shown.
BIN
CatherineLynwood/wwwroot/audio/editing-and-proof-reading.mp3
Normal file
BIN
CatherineLynwood/wwwroot/audio/editing-and-proof-reading.mp3
Normal file
Binary file not shown.
408
CatherineLynwood/wwwroot/css/reckoning-mobile.css
Normal file
408
CatherineLynwood/wwwroot/css/reckoning-mobile.css
Normal file
@ -0,0 +1,408 @@
|
||||
.reckoning-mobile-page {
|
||||
background: radial-gradient(circle at top, rgba(255,255,255,0.08), transparent 30%), linear-gradient(180deg, #5e4632 0%, #6b5139 40%, #4b3728 100%);
|
||||
min-height: 100vh;
|
||||
padding: 16px 12px 40px;
|
||||
color: #2f2419;
|
||||
}
|
||||
|
||||
.reckoning-mobile-hero {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-hero-inner {
|
||||
position: relative;
|
||||
background: linear-gradient(180deg, #cbb189 0%, #b9986d 100%);
|
||||
border: 1px solid rgba(70, 45, 20, 0.28);
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 12px 28px rgba(0, 0, 0, 0.28);
|
||||
padding: 22px 18px 18px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.reckoning-mobile-hero-inner::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: linear-gradient(rgba(255,255,255,0.08), rgba(255,255,255,0)), repeating-linear-gradient( 0deg, rgba(90, 60, 25, 0.02) 0, rgba(90, 60, 25, 0.02) 2px, transparent 2px, transparent 6px );
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.reckoning-mobile-stamp {
|
||||
display: inline-block;
|
||||
margin-bottom: 14px;
|
||||
padding: 6px 12px;
|
||||
border: 3px solid #9c2b24;
|
||||
color: #9c2b24;
|
||||
font-weight: 800;
|
||||
font-size: 0.95rem;
|
||||
letter-spacing: 0.08em;
|
||||
transform: rotate(-7deg);
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.reckoning-mobile-kicker {
|
||||
font-size: 0.8rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
color: #5b4330;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-hero h1 {
|
||||
margin: 0 0 10px;
|
||||
font-size: 1.8rem;
|
||||
line-height: 1.05;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.reckoning-mobile-ref,
|
||||
.reckoning-mobile-status {
|
||||
margin: 0;
|
||||
font-size: 0.95rem;
|
||||
color: #4c3828;
|
||||
}
|
||||
|
||||
.reckoning-mobile-status {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-props {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-props-scroll {
|
||||
display: flex;
|
||||
gap: 14px;
|
||||
overflow-x: auto;
|
||||
padding: 4px 2px 10px;
|
||||
scroll-snap-type: x proximity;
|
||||
}
|
||||
|
||||
.reckoning-mobile-polaroid,
|
||||
.reckoning-mobile-postit {
|
||||
flex: 0 0 150px;
|
||||
scroll-snap-align: start;
|
||||
}
|
||||
|
||||
.reckoning-mobile-polaroid {
|
||||
background: #fff;
|
||||
padding: 10px 10px 22px;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 10px 20px rgba(0,0,0,0.24);
|
||||
transform: rotate(-2deg);
|
||||
}
|
||||
|
||||
.polaroid-tilt-left {
|
||||
transform: rotate(-4deg);
|
||||
}
|
||||
|
||||
.polaroid-tilt-right {
|
||||
transform: rotate(3deg);
|
||||
}
|
||||
|
||||
.polaroid-tilt-slight {
|
||||
transform: rotate(1.5deg);
|
||||
}
|
||||
|
||||
.reckoning-mobile-postit {
|
||||
background: #f3df77;
|
||||
color: #403518;
|
||||
padding: 18px 14px;
|
||||
min-height: 150px;
|
||||
box-shadow: 0 10px 18px rgba(0,0,0,0.22);
|
||||
transform: rotate(-3deg);
|
||||
border: 1px solid rgba(80, 65, 20, 0.12);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.reckoning-mobile-postit span {
|
||||
display: block;
|
||||
font-family: "Shadows Into Light", cursive;
|
||||
font-size: 1.35rem;
|
||||
line-height: 1.1;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.reckoning-mobile-nav {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 20;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
overflow-x: auto;
|
||||
padding: 10px 0 12px;
|
||||
margin-bottom: 14px;
|
||||
background: linear-gradient(180deg, rgba(79, 58, 40, 0.96), rgba(79, 58, 40, 0.82));
|
||||
backdrop-filter: blur(4px);
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-nav a {
|
||||
flex: 0 0 auto;
|
||||
display: inline-block;
|
||||
padding: 9px 14px;
|
||||
border-radius: 999px;
|
||||
background: rgba(255,255,255,0.14);
|
||||
color: #fff6e9;
|
||||
text-decoration: none;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 700;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.reckoning-mobile-file {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 22px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-section {
|
||||
position: relative;
|
||||
padding-top: 18px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-tab {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 12px;
|
||||
z-index: 2;
|
||||
padding: 7px 14px 8px;
|
||||
border-radius: 8px 8px 0 0;
|
||||
font-size: 0.85rem;
|
||||
font-weight: 800;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
box-shadow: 0 -1px 0 rgba(0,0,0,0.08), 0 4px 10px rgba(0,0,0,0.14);
|
||||
}
|
||||
|
||||
.reckoning-tab-summary {
|
||||
background: #d9d1a7;
|
||||
}
|
||||
|
||||
.reckoning-tab-subjects {
|
||||
background: #b8d1ea;
|
||||
}
|
||||
|
||||
.reckoning-tab-evidence {
|
||||
background: #d8b2a7;
|
||||
}
|
||||
|
||||
.reckoning-tab-review {
|
||||
background: #cbb8dd;
|
||||
}
|
||||
|
||||
.reckoning-tab-purchase {
|
||||
background: #b7d6b6;
|
||||
}
|
||||
|
||||
.reckoning-tab-restricted {
|
||||
background: #e0b0b0;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper {
|
||||
background: #f7f1e4;
|
||||
border: 1px solid rgba(90, 66, 42, 0.16);
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 10px 24px rgba(0,0,0,0.22);
|
||||
padding: 22px 16px 18px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
background: linear-gradient(180deg, rgba(255,255,255,0.2), transparent 40%), repeating-linear-gradient( 0deg, rgba(110, 85, 55, 0.018) 0, rgba(110, 85, 55, 0.018) 2px, transparent 2px, transparent 8px );
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper > * {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper h2 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 14px;
|
||||
font-size: 1.4rem;
|
||||
line-height: 1.15;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper h3 {
|
||||
font-size: 1rem;
|
||||
line-height: 1.2;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper p,
|
||||
.reckoning-mobile-paper li,
|
||||
.reckoning-mobile-paper blockquote {
|
||||
font-size: 0.98rem;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper .row {
|
||||
--bs-gutter-x: 12px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper .col-4,
|
||||
.reckoning-mobile-paper .col-8 {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper .col-4 {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper .img-polaroid,
|
||||
.reckoning-mobile-paper .casefile-evidence-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper .reckoning-subject-entry,
|
||||
.reckoning-mobile-paper .casefile-evidence-item,
|
||||
.reckoning-mobile-paper .casefile-review-entry {
|
||||
margin-bottom: 18px;
|
||||
padding-bottom: 18px;
|
||||
border-bottom: 1px dashed rgba(90, 66, 42, 0.2);
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper .reckoning-subject-entry:last-child,
|
||||
.reckoning-mobile-paper .casefile-evidence-item:last-child,
|
||||
.reckoning-mobile-paper .casefile-review-entry:last-child {
|
||||
border-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
@media (min-width: 576px) {
|
||||
.reckoning-mobile-page {
|
||||
padding-left: 16px;
|
||||
padding-right: 16px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper {
|
||||
padding: 26px 20px 20px;
|
||||
}
|
||||
|
||||
.reckoning-mobile-hero h1 {
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper .col-4 {
|
||||
width: 33.333333%;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.reckoning-mobile-paper .col-8 {
|
||||
width: 66.666667%;
|
||||
}
|
||||
}
|
||||
|
||||
.casefile-audio-trigger {
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
border: none;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
.casefile-audio-image-wrapper {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.casefile-audio-image-wrapper::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: rgba(0, 0, 0, 0);
|
||||
transition: background 0.2s ease;
|
||||
z-index: 2;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.casefile-audio-trigger:hover .casefile-audio-image-wrapper::after,
|
||||
.casefile-audio-trigger:focus-visible .casefile-audio-image-wrapper::after {
|
||||
background: rgba(0, 0, 0, 0.14);
|
||||
}
|
||||
|
||||
.casefile-audio-trigger .casefile-evidence-image {
|
||||
display: block;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.casefile-audio-overlay {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 58px;
|
||||
height: 58px;
|
||||
border-radius: 50%;
|
||||
background: rgba(0, 0, 0, 0.68);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
pointer-events: none;
|
||||
z-index: 3;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.35);
|
||||
}
|
||||
|
||||
.casefile-audio-overlay::before,
|
||||
.casefile-audio-overlay::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
/* Play icon */
|
||||
.casefile-audio-overlay::before {
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-left: 4px;
|
||||
border-left: 15px solid #fff;
|
||||
border-top: 10px solid transparent;
|
||||
border-bottom: 10px solid transparent;
|
||||
}
|
||||
|
||||
.casefile-audio-overlay::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Pause icon when playing */
|
||||
.casefile-audio-trigger.is-playing .casefile-audio-overlay::before,
|
||||
.casefile-audio-trigger.is-playing .casefile-audio-overlay::after {
|
||||
width: 5px;
|
||||
height: 20px;
|
||||
background: #fff;
|
||||
border: none;
|
||||
margin-left: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
.casefile-audio-trigger.is-playing .casefile-audio-overlay::before {
|
||||
left: calc(50% - 7px);
|
||||
}
|
||||
|
||||
.casefile-audio-trigger.is-playing .casefile-audio-overlay::after {
|
||||
display: block;
|
||||
left: calc(50% + 2px);
|
||||
}
|
||||
982
CatherineLynwood/wwwroot/css/reckoning.css
Normal file
982
CatherineLynwood/wwwroot/css/reckoning.css
Normal file
@ -0,0 +1,982 @@
|
||||
.reckoning-page-shell {
|
||||
position: relative;
|
||||
width: 100vw;
|
||||
max-width: 100vw;
|
||||
margin-left: calc(50% - 50vw);
|
||||
margin-right: calc(50% - 50vw);
|
||||
overflow-x: clip;
|
||||
}
|
||||
|
||||
.reckoning-desk-section {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 50px 0 120px 0;
|
||||
background-image: url('/images/webp/walnut-desktop.webp');
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.reckoning-desk-section::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -80px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 120px;
|
||||
background: linear-gradient(to bottom, rgba(0,0,0,0), rgba(20,12,8,0.45), rgba(20,12,8,0.0));
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.reckoning-casefile-page {
|
||||
width: 100%;
|
||||
min-height: auto;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
box-sizing: border-box;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.casefile-stage {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
perspective: 2200px;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.casefile {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: min(560px, 100%);
|
||||
max-width: 100%;
|
||||
overflow: visible;
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s ease;
|
||||
z-index: 10;
|
||||
margin-left: 50%;
|
||||
}
|
||||
|
||||
.casefile.assets-ready {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.casefile-rear {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.casefile-rear-img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
user-select: none;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.casefile-flap-shadow {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
z-index: 1;
|
||||
background: linear-gradient( to right, rgba(0, 0, 0, 0.18) 0%, rgba(0, 0, 0, 0.10) 10%, rgba(0, 0, 0, 0.04) 22%, rgba(0, 0, 0, 0.00) 38% );
|
||||
opacity: 0.85;
|
||||
transition: opacity 1.4s cubic-bezier(.22,1,.36,1);
|
||||
}
|
||||
|
||||
.casefile.open .casefile-flap-shadow {
|
||||
opacity: 0.08;
|
||||
}
|
||||
|
||||
.casefile-front {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
transform-origin: left center;
|
||||
transform-style: preserve-3d;
|
||||
z-index: 30;
|
||||
will-change: transform;
|
||||
transform: translateY(0);
|
||||
transition: transform 0.4s ease;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.casefile.ready .casefile-front {
|
||||
transform: translateY(2px);
|
||||
}
|
||||
|
||||
.casefile.open .casefile-front {
|
||||
animation: folderOpenRealistic 1.65s cubic-bezier(.22,1,.36,1) forwards;
|
||||
}
|
||||
|
||||
.casefile-front-face {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
backface-visibility: hidden;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
|
||||
.casefile-front-face-front {
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.casefile-front-face-back {
|
||||
transform: rotateY(180deg);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.casefile-front-img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
user-select: none;
|
||||
pointer-events: none;
|
||||
filter: drop-shadow(0 12px 18px rgba(0, 0, 0, 0.25));
|
||||
}
|
||||
|
||||
.casefile-front-img-back {
|
||||
filter: brightness(0.96) saturate(0.9);
|
||||
}
|
||||
|
||||
@keyframes folderOpenRealistic {
|
||||
0% {
|
||||
transform: perspective(2200px) rotateY(0deg);
|
||||
}
|
||||
|
||||
16% {
|
||||
transform: perspective(2200px) rotateY(-14deg);
|
||||
}
|
||||
|
||||
45% {
|
||||
transform: perspective(2200px) rotateY(-72deg);
|
||||
}
|
||||
|
||||
72% {
|
||||
transform: perspective(2200px) rotateY(-138deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: perspective(2200px) rotateY(-180deg);
|
||||
}
|
||||
}
|
||||
|
||||
.casefile-front-overlay {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
box-sizing: border-box;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.casefile-stamp {
|
||||
position: absolute;
|
||||
top: 8%;
|
||||
right: 10%;
|
||||
color: rgba(135, 22, 22, 0.78);
|
||||
border: 3px solid rgba(135, 22, 22, 0.78);
|
||||
padding: 0.35rem 0.8rem;
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.08em;
|
||||
transform: translateX(-30px) rotate(-8deg) scale(2);
|
||||
transform-origin: top right;
|
||||
}
|
||||
|
||||
.casefile-cover-text {
|
||||
position: absolute;
|
||||
top: 18%;
|
||||
left: 10%;
|
||||
width: 52%;
|
||||
color: #2e2518;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.casefile-cover-kicker {
|
||||
font-size: 0.85rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.14em;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.casefile-cover-text h1 {
|
||||
margin: 0 0 1rem 0;
|
||||
font-size: clamp(2rem, 3.8vw, 3.2rem);
|
||||
line-height: 1;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.casefile-cover-text p {
|
||||
margin: 0.35rem 0;
|
||||
font-size: 1rem;
|
||||
line-height: 1.4;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.casefile-open-hint {
|
||||
position: absolute;
|
||||
bottom: 8%;
|
||||
right: 10%;
|
||||
font-size: 0.95rem;
|
||||
font-weight: 600;
|
||||
color: rgba(47, 38, 25, 0.8);
|
||||
letter-spacing: 0.04em;
|
||||
transition: opacity 0.2s ease;
|
||||
}
|
||||
|
||||
.casefile.open .casefile-open-hint {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.casefile-inner {
|
||||
position: absolute;
|
||||
inset: 4% 6% 5% 2%;
|
||||
display: flex;
|
||||
gap: 0;
|
||||
box-sizing: border-box;
|
||||
z-index: 2;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.casefile.revealed .casefile-inner {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.casefile-paper-stack {
|
||||
position: relative;
|
||||
flex: 1 1 auto;
|
||||
min-width: 0;
|
||||
min-height: 100%;
|
||||
height: calc(100% + 24px);
|
||||
width: calc(100% + 10px);
|
||||
z-index: 1;
|
||||
margin-left: -10px;
|
||||
margin-top: -10px;
|
||||
margin-bottom: -10px;
|
||||
}
|
||||
|
||||
.casefile-paper-stack-layer {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
border-radius: 2px;
|
||||
background: #f6f1e5;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.casefile-paper-stack-layer-1 {
|
||||
transform: translate(10px, 8px);
|
||||
opacity: 0.85;
|
||||
z-index: 0;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
|
||||
}
|
||||
|
||||
.casefile-paper-stack-layer-2 {
|
||||
transform: translate(5px, 4px);
|
||||
opacity: 0.92;
|
||||
z-index: 1;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.casefile-content {
|
||||
position: relative;
|
||||
z-index: 6;
|
||||
min-width: 0;
|
||||
min-height: 100%;
|
||||
height: 100%;
|
||||
padding: 1.6rem 2rem 1.5rem 1.8rem;
|
||||
overflow: hidden;
|
||||
border-radius: 2px;
|
||||
background-color: #fbf8ef;
|
||||
background-image: repeating-linear-gradient( to bottom, rgba(120, 140, 170, 0.14) 0px, rgba(120, 140, 170, 0.14) 1px, transparent 1px, transparent 34px );
|
||||
box-shadow: inset 0 0 0 1px rgba(80, 60, 35, 0.08);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.casefile-panel {
|
||||
display: none;
|
||||
max-width: 100%;
|
||||
flex: 1 1 auto;
|
||||
position: relative;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 1.75rem 1.5rem 1.5rem;
|
||||
overflow: hidden;
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
color: #2e241c;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.casefile-panel.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.casefile-panel h2 {
|
||||
margin: 0 0 1rem;
|
||||
font-size: 1.4rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
color: #1f1813;
|
||||
}
|
||||
|
||||
.casefile-panel h2::after {
|
||||
content: "";
|
||||
display: block;
|
||||
margin-top: 0.5rem;
|
||||
height: 1px;
|
||||
background: rgba(60, 45, 30, 0.35);
|
||||
}
|
||||
|
||||
.casefile-panel p,
|
||||
.casefile-panel li {
|
||||
font-size: clamp(0.95rem, 1.2vw, 1rem);
|
||||
line-height: 1.7;
|
||||
margin: 0 0 0.45rem;
|
||||
font-size: 0.95rem;
|
||||
color: #332a1d;
|
||||
}
|
||||
|
||||
.casefile-panel p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.casefile-panel strong {
|
||||
font-weight: bold;
|
||||
color: #201914;
|
||||
}
|
||||
|
||||
.casefile-panel ul {
|
||||
margin: 1rem 0 0 1.25rem;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.casefile-panel::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
/*background: radial-gradient(circle at 50% 50%, rgba(0, 0, 0, 0.03), rgba(0, 0, 0, 0.06));*/
|
||||
mix-blend-mode: multiply;
|
||||
opacity: 0.45;
|
||||
}
|
||||
|
||||
.casefile-panel[data-tab="summary"] p:nth-last-child(2),
|
||||
.casefile-panel[data-tab="summary"] p:last-child {
|
||||
font-weight: bold;
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
|
||||
.casefile-panel[data-tab="summary"] p:last-child {
|
||||
margin-top: 1.25rem;
|
||||
font-size: 1.05rem;
|
||||
letter-spacing: 0.06em;
|
||||
}
|
||||
|
||||
.casefile-inner .casefile-content {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.casefile-inner .casefile-panel {
|
||||
display: none;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
padding: 1.5rem;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: rgba(80, 60, 40, 0.45) transparent;
|
||||
}
|
||||
|
||||
.casefile-inner .casefile-panel.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.casefile-inner .casefile-panel::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
}
|
||||
|
||||
.casefile-inner .casefile-panel::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.casefile-inner .casefile-panel::-webkit-scrollbar-thumb {
|
||||
background: rgba(80, 60, 40, 0.45);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.casefile-tabs {
|
||||
width: 100px;
|
||||
flex: 0 0 100px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0;
|
||||
padding-top: 1.1rem;
|
||||
position: relative;
|
||||
z-index: 7;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.casefile-tab {
|
||||
appearance: none;
|
||||
border: 1px solid rgba(70, 55, 35, 0.18);
|
||||
color: #2f2619;
|
||||
padding: 0.65rem 0.6rem 0.65rem 1rem;
|
||||
text-align: right;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 700;
|
||||
border-radius: 0 10px 10px 0;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
box-shadow: none;
|
||||
transition: none;
|
||||
margin-bottom: -1px;
|
||||
left: 0;
|
||||
background-clip: padding-box;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.casefile-tab::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -1px;
|
||||
bottom: -1px;
|
||||
left: -20px;
|
||||
width: 30px;
|
||||
background: inherit;
|
||||
border-top: 1px solid rgba(70, 55, 35, 0.18);
|
||||
border-bottom: 1px solid rgba(70, 55, 35, 0.04);
|
||||
border-left: 1px solid rgba(70, 55, 35, 0.18);
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
z-index: 2;
|
||||
border-top-left-radius: 3px;
|
||||
border-bottom-left-radius: 3px;
|
||||
}
|
||||
|
||||
.casefile-tab:nth-child(1) {
|
||||
background: #f6d96b;
|
||||
z-index: 6;
|
||||
}
|
||||
|
||||
.casefile-tab:nth-child(2) {
|
||||
background: #f4a6c1;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
.casefile-tab:nth-child(3) {
|
||||
background: #9ed8f5;
|
||||
z-index: 4;
|
||||
}
|
||||
|
||||
.casefile-tab:nth-child(4) {
|
||||
background: #b9e3a1;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.casefile-tab:nth-child(5) {
|
||||
background: #f7b26a;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.casefile-tab:nth-child(6) {
|
||||
background: #c7b5f0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.casefile-tab:hover {
|
||||
filter: brightness(0.98);
|
||||
}
|
||||
|
||||
.casefile-tab.active {
|
||||
z-index: 20;
|
||||
filter: none;
|
||||
}
|
||||
|
||||
.casefile-tab.active::before {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.casefile-tab.restricted {
|
||||
background: #c7b5f0;
|
||||
color: #5c4631;
|
||||
}
|
||||
|
||||
.casefile-tab.restricted.active {
|
||||
background: #c7b5f0;
|
||||
color: #5c4631;
|
||||
}
|
||||
|
||||
.restricted-panel .restricted-label {
|
||||
display: inline-block;
|
||||
padding: 0.35rem 0.7rem;
|
||||
border: 2px solid #8d1b1b;
|
||||
color: #8d1b1b;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.08em;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.restricted-button {
|
||||
display: inline-block;
|
||||
margin-top: 1rem;
|
||||
background: #2f2619;
|
||||
color: #fff8eb;
|
||||
text-decoration: none;
|
||||
padding: 0.8rem 1.2rem;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.reckoning-desk-props {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.reckoning-desk-photos {
|
||||
position: absolute;
|
||||
top: 110px;
|
||||
left: 7%;
|
||||
width: 320px;
|
||||
height: 420px;
|
||||
}
|
||||
|
||||
.reckoning-desk-photo {
|
||||
position: absolute;
|
||||
width: 240px;
|
||||
background: #f7f3ea;
|
||||
padding: 10px 10px 28px 10px;
|
||||
box-shadow: 0 14px 24px rgba(0, 0, 0, 0.28);
|
||||
border: 1px solid rgba(60, 45, 30, 0.14);
|
||||
}
|
||||
|
||||
.reckoning-desk-photo img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
aspect-ratio: 2 / 3;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.reckoning-desk-photo-1 {
|
||||
top: 100px;
|
||||
left: 152px;
|
||||
transform: rotate(-11deg);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.reckoning-desk-photo-2 {
|
||||
top: 20;
|
||||
left: 174px;
|
||||
transform: rotate(23deg);
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.reckoning-desk-photo-3 {
|
||||
top: 36px;
|
||||
left: 56px;
|
||||
transform: rotate(-7deg);
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.reckoning-desk-postit {
|
||||
position: absolute;
|
||||
top: 620px;
|
||||
left: 250px;
|
||||
width: 150px;
|
||||
min-height: 150px;
|
||||
background: #f6e27a;
|
||||
color: #3f341c;
|
||||
padding: 18px 16px;
|
||||
box-shadow: 0 10px 18px rgba(0, 0, 0, 0.22);
|
||||
transform: rotate(-4deg);
|
||||
border: 1px solid rgba(80, 65, 20, 0.12);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.reckoning-desk-postit span {
|
||||
display: block;
|
||||
font-family: 'Permanent Marker', cursive;
|
||||
/* swap to 'Shadows Into Light' if you want softer */
|
||||
|
||||
font-size: 1.25rem;
|
||||
line-height: 1.3;
|
||||
font-weight: normal; /* handwritten fonts don't need bold */
|
||||
|
||||
letter-spacing: 0.5px;
|
||||
word-spacing: 2px;
|
||||
color: #2e2614;
|
||||
transform: rotate(-1deg); /* slight imperfection */
|
||||
|
||||
text-shadow: 0.5px 0.5px 0 rgba(0,0,0,0.15); /* subtle ink bleed */
|
||||
}
|
||||
|
||||
.casefile-evidence-image {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
width: 100%;
|
||||
object-fit: contain;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25), 0 8px 14px rgba(0, 0, 0, 0.18);
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.casefile-audio-trigger {
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
border: none;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.casefile-audio-image-wrapper {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.casefile-audio-image-wrapper::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: rgba(0,0,0,0.0);
|
||||
transition: background 0.2s ease;
|
||||
}
|
||||
|
||||
.casefile-audio-trigger:hover .casefile-audio-image-wrapper::after {
|
||||
background: rgba(0,0,0,0.15);
|
||||
}
|
||||
|
||||
.casefile-audio-overlay {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 56px;
|
||||
height: 56px;
|
||||
border-radius: 50%;
|
||||
background: rgba(0, 0, 0, 0.65);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
pointer-events: none;
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.35);
|
||||
}
|
||||
|
||||
.casefile-audio-overlay::before,
|
||||
.casefile-audio-overlay::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.casefile-audio-overlay::before {
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-left: 3px;
|
||||
border-left: 14px solid white;
|
||||
border-top: 9px solid transparent;
|
||||
border-bottom: 9px solid transparent;
|
||||
}
|
||||
|
||||
.casefile-audio-overlay::after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.casefile-audio-trigger.is-playing .casefile-audio-overlay::before,
|
||||
.casefile-audio-trigger.is-playing .casefile-audio-overlay::after {
|
||||
width: 4px;
|
||||
height: 18px;
|
||||
background: white;
|
||||
border: none;
|
||||
margin-left: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
.casefile-audio-trigger.is-playing .casefile-audio-overlay::before {
|
||||
left: calc(50% - 6px);
|
||||
}
|
||||
|
||||
.casefile-audio-trigger.is-playing .casefile-audio-overlay::after {
|
||||
display: block;
|
||||
left: calc(50% + 2px);
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.reckoning-desk-section {
|
||||
padding: 70px 0 80px 0;
|
||||
}
|
||||
|
||||
.casefile-inner {
|
||||
inset: 9% 8% 10% 8%;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.casefile-paper-stack {
|
||||
min-height: 0;
|
||||
height: auto;
|
||||
width: auto;
|
||||
margin-left: 0;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.casefile-paper-stack-layer-1 {
|
||||
transform: translate(6px, 5px);
|
||||
}
|
||||
|
||||
.casefile-paper-stack-layer-2 {
|
||||
transform: translate(3px, 2px);
|
||||
}
|
||||
|
||||
.casefile-content {
|
||||
padding: 1rem;
|
||||
min-height: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.casefile-tabs {
|
||||
width: 100%;
|
||||
flex: 0 0 auto;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
padding-top: 0.5rem;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.casefile-tab {
|
||||
flex: 1 1 calc(50% - 8px);
|
||||
border-radius: 8px;
|
||||
text-align: center;
|
||||
margin-bottom: 0;
|
||||
left: 0 !important;
|
||||
}
|
||||
|
||||
.casefile-tab.active {
|
||||
left: 0 !important;
|
||||
}
|
||||
|
||||
.casefile-tab::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.casefile-cover-text {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.casefile-cover-text h1 {
|
||||
font-size: clamp(1.6rem, 5vw, 2.3rem);
|
||||
}
|
||||
|
||||
.casefile-open-hint {
|
||||
right: 8%;
|
||||
bottom: 6%;
|
||||
font-size: 0.88rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.casefile-panel {
|
||||
padding: 1.25rem 1rem 1rem;
|
||||
}
|
||||
|
||||
.casefile-panel h2 {
|
||||
font-size: 1.15rem;
|
||||
}
|
||||
|
||||
.casefile-panel p {
|
||||
font-size: 0.92rem;
|
||||
}
|
||||
}
|
||||
|
||||
.buybox-casefile-page {
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
color: #2e241c;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.buybox-casefile-page-header {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.buybox-casefile-page-header h2 {
|
||||
margin: 0 0 0.75rem;
|
||||
font-size: 1.4rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
color: #1f1813;
|
||||
}
|
||||
|
||||
.buybox-casefile-page-header h2::after {
|
||||
content: "";
|
||||
display: block;
|
||||
margin-top: 0.5rem;
|
||||
height: 1px;
|
||||
background: rgba(60, 45, 30, 0.35);
|
||||
}
|
||||
|
||||
.buybox-casefile-country {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
margin: 0;
|
||||
font-size: 0.95rem;
|
||||
color: #5a4a3d;
|
||||
}
|
||||
|
||||
.buybox-casefile-flag {
|
||||
display: block;
|
||||
flex: 0 0 auto;
|
||||
width: 20px;
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
.buybox-casefile-groups {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.buybox-casefile-group {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.buybox-casefile-group:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.buybox-casefile-group-title {
|
||||
margin: 0 0 0.5rem;
|
||||
font-size: 1rem;
|
||||
text-transform: none;
|
||||
letter-spacing: 0.04em;
|
||||
color: #1f1813;
|
||||
}
|
||||
|
||||
.buybox-casefile-group-message {
|
||||
margin: 0 0 0.85rem;
|
||||
font-size: 0.95rem;
|
||||
color: #5a4a3d;
|
||||
}
|
||||
|
||||
.buybox-casefile-links {
|
||||
border-top: 1px solid rgba(70, 50, 35, 0.2);
|
||||
}
|
||||
|
||||
.buybox-casefile-link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
padding: 0.7rem 0;
|
||||
text-decoration: none;
|
||||
color: #2e241c;
|
||||
border-bottom: 1px dashed rgba(70, 50, 35, 0.28);
|
||||
transition: background-color 0.15s ease, padding-left 0.15s ease;
|
||||
}
|
||||
|
||||
.buybox-casefile-link:hover {
|
||||
background-color: rgba(90, 74, 61, 0.06);
|
||||
padding-left: 0.35rem;
|
||||
color: #1f1813;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.buybox-casefile-link:last-child {
|
||||
border-bottom: 1px dashed rgba(70, 50, 35, 0.28);
|
||||
}
|
||||
|
||||
.buybox-casefile-link-main {
|
||||
min-width: 0;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
.buybox-casefile-link-text {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.45rem;
|
||||
line-height: 1.35;
|
||||
}
|
||||
|
||||
.buybox-casefile-price {
|
||||
flex: 0 0 auto;
|
||||
white-space: nowrap;
|
||||
font-weight: bold;
|
||||
color: #1f1813;
|
||||
}
|
||||
|
||||
@media (max-width: 575.98px) {
|
||||
.buybox-casefile-page-header h2 {
|
||||
font-size: 1.15rem;
|
||||
}
|
||||
|
||||
.buybox-casefile-country,
|
||||
.buybox-casefile-group-message,
|
||||
.buybox-casefile-link,
|
||||
.buybox-casefile-price {
|
||||
font-size: 0.92rem;
|
||||
}
|
||||
|
||||
.buybox-casefile-link {
|
||||
gap: 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
.reckoning-subject-entry {
|
||||
margin-bottom: 1.25rem;
|
||||
padding-bottom: 1rem;
|
||||
border-bottom: 1px dashed rgba(70, 50, 35, 0.35);
|
||||
}
|
||||
|
||||
.reckoning-subject-entry:last-child {
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 0;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.reckoning-subject-entry h3 {
|
||||
margin: 0 0 0.55rem;
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
color: #1f1813;
|
||||
}
|
||||
|
||||
.reckoning-subject-entry p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.reckoning-subject-entry strong {
|
||||
font-weight: bold;
|
||||
color: #201914;
|
||||
}
|
||||
|
||||
.img-polaroid {
|
||||
display: block;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
/* Polaroid border */
|
||||
background: #fff;
|
||||
padding: 5px 5px 10px 5px; /* thicker bottom */
|
||||
/* Subtle ageing */
|
||||
border: 1px solid rgba(0, 0, 0, 0.08);
|
||||
/* Shadow for realism */
|
||||
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.25), 0 2px 5px rgba(0, 0, 0, 0.15);
|
||||
/* Slight imperfection */
|
||||
transform: rotate(-1.5deg);
|
||||
/* Optional: soften edges slightly */
|
||||
border-radius: 2px;
|
||||
}
|
||||
BIN
CatherineLynwood/wwwroot/images/80k-word-limit-is-a-myth.png
Normal file
BIN
CatherineLynwood/wwwroot/images/80k-word-limit-is-a-myth.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
BIN
CatherineLynwood/wwwroot/images/bank-book.png
Normal file
BIN
CatherineLynwood/wwwroot/images/bank-book.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 MiB |
BIN
CatherineLynwood/wwwroot/images/blackmail-note.png
Normal file
BIN
CatherineLynwood/wwwroot/images/blackmail-note.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.6 MiB |
BIN
CatherineLynwood/wwwroot/images/cassette-tape.png
Normal file
BIN
CatherineLynwood/wwwroot/images/cassette-tape.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
s œîÞ´KhÂ<68>-_J¡±–ê^À·3O^›%p<>ÏÏÐ –Â[ˆüßM>ñœÎí²•eW$a/±ÃO˜º)‚>â#›¤µiÅgÇ6¯×ß«ŸÄ/o6f-ùOðîèµKֹɨ³‡:ÀૹÀ#»Õ§Ó!L>þ½±4Z¸Úá-àš–v¾‹ï#k}.Ë!æ7ï Ñ÷óÓü
žX.g…y¤’Œvé[J”%5ÃnÓ)'bkû±\Ó!)3 ª*ÙD$ha-¡<02>ªHê¾ËWöô^†¤u‚<>ŠDjÂÀ£“BD[øBêsª) Œ¯@*Nô'5¸„é>é,“qF§ð©iJP„
ê¨ÂNÂ&åfÀGœvA–!o«ê;Ux’·{¯¨KYë2óËæõp†ý•*ÞÈuÐÚEŒû“Ã$Ï›ßS:Ã+ <>V6gáð®—Sv
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user