2
0

feat(pages): add comparison table section to landing pages
Some checks failed
Build and Release / Create Release (push) Successful in 0s
Build and Release / Integration Tests (PostgreSQL) (push) Successful in 2m51s
Build and Release / Lint (push) Failing after 8m33s
Build and Release / Build Binaries (amd64, linux, linux-latest) (push) Has been skipped
Build and Release / Build Binaries (amd64, windows, windows-latest) (push) Has been skipped
Build and Release / Unit Tests (push) Successful in 8m46s
Build and Release / Build Binaries (amd64, darwin, macos) (push) Has been skipped
Build and Release / Build Binaries (arm64, darwin, macos) (push) Has been skipped
Build and Release / Build Binary (linux/arm64) (push) Has been skipped

Add configurable comparison matrix section for feature comparisons. Supports 3 columns (e.g., your product vs competitors, or pricing tiers) with optional highlight column. Features can be organized into groups. Each cell accepts "true" for checkmark, "false" for X, or custom text. Includes settings UI with up to 10 groups and 20 features per group. Renders in all 9 page templates with responsive table styling.
This commit is contained in:
2026-03-16 23:05:10 -04:00
parent d45354b538
commit cdf47b5ecd
13 changed files with 665 additions and 0 deletions

View File

@@ -499,6 +499,37 @@ func PagesContentPost(ctx *context.Context) {
}
config.Features = append(config.Features, pages_module.FeatureConfig{Title: title, Description: desc, Icon: icon, ImageURL: imageURL})
}
// Comparison section
config.Comparison.Enabled = ctx.FormBool("comparison_enabled")
config.Comparison.Headline = ctx.FormString("comparison_headline")
config.Comparison.Subheadline = ctx.FormString("comparison_subheadline")
config.Comparison.Columns = make([]pages_module.ComparisonColumnConfig, 3)
for c := range 3 {
config.Comparison.Columns[c] = pages_module.ComparisonColumnConfig{
Name: ctx.FormString(fmt.Sprintf("comparison_col_name_%d", c)),
Highlight: ctx.FormBool(fmt.Sprintf("comparison_col_highlight_%d", c)),
}
}
config.Comparison.Groups = nil
for g := range 10 {
groupName := ctx.FormString(fmt.Sprintf("comparison_group_name_%d", g))
var features []pages_module.ComparisonFeatureConfig
for f := range 20 {
featName := ctx.FormString(fmt.Sprintf("comparison_feat_name_%d_%d", g, f))
if featName == "" {
continue
}
var values []string
for c := range 3 {
values = append(values, ctx.FormString(fmt.Sprintf("comparison_feat_val_%d_%d_%d", g, f, c)))
}
features = append(features, pages_module.ComparisonFeatureConfig{Name: featName, Values: values})
}
if groupName == "" && len(features) == 0 {
continue
}
config.Comparison.Groups = append(config.Comparison.Groups, pages_module.ComparisonGroupConfig{Name: groupName, Features: features})
}
if err := savePagesLandingConfig(ctx, config); err != nil {
ctx.ServerError("SavePagesConfig", err)
return