rails_site_engine 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +137 -0
  4. data/Rakefile +6 -0
  5. data/app/assets/stylesheets/rails_site_engine/application.css +15 -0
  6. data/app/assets/stylesheets/rails_site_engine/engine.css +2 -0
  7. data/app/assets/stylesheets/rails_site_engine/engine.tailwind.css +5 -0
  8. data/app/controllers/rails_site_engine/application_controller.rb +27 -0
  9. data/app/controllers/rails_site_engine/contacts_controller.rb +35 -0
  10. data/app/controllers/rails_site_engine/meta_controller.rb +20 -0
  11. data/app/controllers/rails_site_engine/pages_controller.rb +18 -0
  12. data/app/helpers/rails_site_engine/application_helper.rb +266 -0
  13. data/app/javascript/controllers/rails_site_engine/color_mode_controller.js +83 -0
  14. data/app/javascript/controllers/rails_site_engine/form_submit_controller.js +22 -0
  15. data/app/javascript/controllers/rails_site_engine/mobile_nav_controller.js +45 -0
  16. data/app/javascript/rails_site_engine/application.js +8 -0
  17. data/app/jobs/rails_site_engine/application_job.rb +4 -0
  18. data/app/mailers/rails_site_engine/application_mailer.rb +6 -0
  19. data/app/mailers/rails_site_engine/contact_mailer.rb +25 -0
  20. data/app/models/rails_site_engine/application_record.rb +5 -0
  21. data/app/models/rails_site_engine/contact_message.rb +16 -0
  22. data/app/views/layouts/mailer.html.erb +13 -0
  23. data/app/views/layouts/mailer.text.erb +1 -0
  24. data/app/views/layouts/rails_site_engine/application.html.erb +54 -0
  25. data/app/views/rails_site_engine/contact_mailer/notify.text.erb +9 -0
  26. data/app/views/rails_site_engine/contacts/new.html.erb +1 -0
  27. data/app/views/rails_site_engine/pages/show.html.erb +15 -0
  28. data/app/views/rails_site_engine/sections/_contact_form.html.erb +112 -0
  29. data/app/views/rails_site_engine/sections/_cta_band.html.erb +27 -0
  30. data/app/views/rails_site_engine/sections/_faq.html.erb +29 -0
  31. data/app/views/rails_site_engine/sections/_feature_cards.html.erb +30 -0
  32. data/app/views/rails_site_engine/sections/_hero.html.erb +39 -0
  33. data/app/views/rails_site_engine/sections/_pricing_cards.html.erb +53 -0
  34. data/app/views/rails_site_engine/sections/_process_steps.html.erb +35 -0
  35. data/app/views/rails_site_engine/sections/_project_cards.html.erb +48 -0
  36. data/app/views/rails_site_engine/sections/_proof_strip.html.erb +16 -0
  37. data/app/views/rails_site_engine/sections/_rich_text.html.erb +15 -0
  38. data/app/views/rails_site_engine/sections/_stats.html.erb +34 -0
  39. data/app/views/rails_site_engine/sections/_testimonials.html.erb +40 -0
  40. data/app/views/rails_site_engine/sections/_unknown.html.erb +6 -0
  41. data/app/views/rails_site_engine/shared/_flash.html.erb +18 -0
  42. data/app/views/rails_site_engine/shared/_footer.html.erb +41 -0
  43. data/app/views/rails_site_engine/shared/_navbar.html.erb +118 -0
  44. data/config/importmap.rb +5 -0
  45. data/config/locales/en.yml +27 -0
  46. data/config/routes.rb +9 -0
  47. data/config/site_profiles.yml +23 -0
  48. data/lib/generators/rails_site_engine/install/install_generator.rb +454 -0
  49. data/lib/generators/rails_site_engine/install/templates/config/theme.yml +3 -0
  50. data/lib/generators/rails_site_engine/install/templates/content/pages/about.md +12 -0
  51. data/lib/generators/rails_site_engine/install/templates/content/pages/contact.md +13 -0
  52. data/lib/generators/rails_site_engine/install/templates/content/pages/home.md +39 -0
  53. data/lib/generators/rails_site_engine/install/templates/content/pages/privacy.md +43 -0
  54. data/lib/generators/rails_site_engine/install/templates/content/pages/services.md +25 -0
  55. data/lib/generators/rails_site_engine/install/templates/content/site.yml +36 -0
  56. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-carpentry/config/theme.yml +3 -0
  57. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-carpentry/content/pages/about.md +14 -0
  58. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-carpentry/content/pages/contact.md +12 -0
  59. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-carpentry/content/pages/home.md +55 -0
  60. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-carpentry/content/pages/privacy.md +43 -0
  61. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-carpentry/content/pages/services.md +29 -0
  62. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-carpentry/content/site.yml +36 -0
  63. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-electrician/config/theme.yml +3 -0
  64. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-electrician/content/pages/about.md +14 -0
  65. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-electrician/content/pages/contact.md +12 -0
  66. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-electrician/content/pages/home.md +55 -0
  67. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-electrician/content/pages/privacy.md +43 -0
  68. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-electrician/content/pages/services.md +29 -0
  69. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-electrician/content/site.yml +36 -0
  70. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-general/config/theme.yml +3 -0
  71. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-general/content/pages/about.md +14 -0
  72. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-general/content/pages/contact.md +12 -0
  73. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-general/content/pages/home.md +55 -0
  74. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-general/content/pages/privacy.md +43 -0
  75. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-general/content/pages/services.md +29 -0
  76. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-general/content/site.yml +36 -0
  77. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-plumbing/config/theme.yml +3 -0
  78. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-plumbing/content/pages/about.md +14 -0
  79. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-plumbing/content/pages/contact.md +12 -0
  80. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-plumbing/content/pages/home.md +55 -0
  81. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-plumbing/content/pages/privacy.md +43 -0
  82. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-plumbing/content/pages/services.md +29 -0
  83. data/lib/generators/rails_site_engine/install/templates/site_profiles/home-services-plumbing/content/site.yml +36 -0
  84. data/lib/generators/rails_site_engine/install/templates/site_profiles/portfolio/config/theme.yml +3 -0
  85. data/lib/generators/rails_site_engine/install/templates/site_profiles/portfolio/content/pages/about.md +26 -0
  86. data/lib/generators/rails_site_engine/install/templates/site_profiles/portfolio/content/pages/contact.md +12 -0
  87. data/lib/generators/rails_site_engine/install/templates/site_profiles/portfolio/content/pages/home.md +43 -0
  88. data/lib/generators/rails_site_engine/install/templates/site_profiles/portfolio/content/pages/privacy.md +43 -0
  89. data/lib/generators/rails_site_engine/install/templates/site_profiles/portfolio/content/pages/work.md +27 -0
  90. data/lib/generators/rails_site_engine/install/templates/site_profiles/portfolio/content/site.yml +36 -0
  91. data/lib/generators/rails_site_engine/install/templates/site_profiles/software-contracting/config/theme.yml +3 -0
  92. data/lib/generators/rails_site_engine/install/templates/site_profiles/software-contracting/content/pages/about.md +14 -0
  93. data/lib/generators/rails_site_engine/install/templates/site_profiles/software-contracting/content/pages/contact.md +12 -0
  94. data/lib/generators/rails_site_engine/install/templates/site_profiles/software-contracting/content/pages/home.md +48 -0
  95. data/lib/generators/rails_site_engine/install/templates/site_profiles/software-contracting/content/pages/pricing.md +57 -0
  96. data/lib/generators/rails_site_engine/install/templates/site_profiles/software-contracting/content/pages/privacy.md +43 -0
  97. data/lib/generators/rails_site_engine/install/templates/site_profiles/software-contracting/content/pages/projects.md +27 -0
  98. data/lib/generators/rails_site_engine/install/templates/site_profiles/software-contracting/content/site.yml +38 -0
  99. data/lib/rails_site_engine/content/store.rb +297 -0
  100. data/lib/rails_site_engine/engine.rb +15 -0
  101. data/lib/rails_site_engine/markdown_renderer.rb +37 -0
  102. data/lib/rails_site_engine/profile_defaults.rb +83 -0
  103. data/lib/rails_site_engine/site_engine_config.rb +78 -0
  104. data/lib/rails_site_engine/site_profiles.rb +166 -0
  105. data/lib/rails_site_engine/sitemap_xml.rb +26 -0
  106. data/lib/rails_site_engine/theme.rb +54 -0
  107. data/lib/rails_site_engine/version.rb +3 -0
  108. data/lib/rails_site_engine.rb +13 -0
  109. data/lib/tasks/rails_site_engine_tasks.rake +7 -0
  110. metadata +179 -0
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: "Privacy Policy"
3
+ description: "How <%= business_name %> collects, uses, and protects your information."
4
+ path: "/privacy"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "This page explains what information we collect, how we use it, and your choices."
8
+ sections:
9
+ - type: rich_text
10
+ ---
11
+
12
+ ## Information We Collect
13
+ When you use our contact form, we may collect your name, email address, phone number, and the details in your message.
14
+
15
+ Our form also includes a hidden `website` field used as an anti-spam honeypot. Legitimate visitors should leave this field empty.
16
+
17
+ ## How We Use Information
18
+ We use inquiry details to:
19
+
20
+ - respond to your questions and requests
21
+ - follow up about potential work
22
+ - keep basic records of conversations and project requests
23
+ - improve service and communication
24
+
25
+ ## Sharing and Disclosure
26
+ We do not sell or rent your personal information.
27
+
28
+ We may share information with trusted service providers only when needed to operate this site or process communications (for example, email delivery). We may also disclose information if required by law.
29
+
30
+ ## Retention
31
+ We keep inquiry information only as long as needed for legitimate business purposes, legal compliance, and recordkeeping. When information is no longer needed, we delete it or anonymize it.
32
+
33
+ ## Security
34
+ We use reasonable technical and organizational safeguards to protect personal information. No internet transmission or storage method is 100% secure, but we work to reduce risk.
35
+
36
+ ## Your Choices
37
+ You can request access, correction, or deletion of personal information you have submitted to us.
38
+
39
+ ## Changes to This Policy
40
+ We may update this Privacy Policy from time to time. Updates are effective when posted on this page.
41
+
42
+ ## Contact
43
+ For privacy questions or requests, use the contact details listed on the [Contact page](/contact).
@@ -0,0 +1,29 @@
1
+ ---
2
+ title: "Services"
3
+ description: "Home services for repairs, upgrades, and maintenance."
4
+ path: "/services"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "Practical service options built around reliability and quality."
8
+ sections:
9
+ - type: feature_cards
10
+ heading: "Service lineup"
11
+ items:
12
+ - title: "Repair visits"
13
+ description: "Troubleshoot and resolve common household issues quickly."
14
+ - title: "Replacement and upgrades"
15
+ description: "Replace worn components and improve long-term performance."
16
+ - title: "Routine maintenance"
17
+ description: "Keep systems running smoothly with scheduled checkups."
18
+ - title: "Emergency support"
19
+ description: "Priority response for urgent issues when available."
20
+ - type: faq
21
+ heading: "Common questions"
22
+ items:
23
+ - question: "How quickly can you come out?"
24
+ answer: "Most requests are scheduled within 1-2 business days, with urgent slots when available."
25
+ - question: "Do you provide written estimates?"
26
+ answer: "Yes. We provide clear estimates before any work starts."
27
+ - question: "Do you bring materials?"
28
+ answer: "Yes, we can source standard materials and coordinate special-order items when needed."
29
+ ---
@@ -0,0 +1,36 @@
1
+ site:
2
+ locale: "en"
3
+ name: "<%= business_name %>"
4
+ base_url: "https://example.com"
5
+
6
+ navigation:
7
+ primary:
8
+ - label: "Home"
9
+ page: "home"
10
+ - label: "Services"
11
+ page: "services"
12
+ - label: "About"
13
+ page: "about"
14
+ - label: "Contact"
15
+ page: "contact"
16
+ footer:
17
+ - label: "Privacy"
18
+ page: "privacy"
19
+
20
+ branding:
21
+ logo_text: "<%= business_name %>"
22
+ primary_cta:
23
+ label: "Get a quote"
24
+ page: "contact"
25
+
26
+ contact:
27
+ page: "contact"
28
+ recipient_email: "leads@example.com"
29
+ phone: "(555) 123-4567"
30
+ email: "hello@example.com"
31
+
32
+ seo:
33
+ default_title: "<%= business_name %>"
34
+ default_description: "Reliable home services with fast response and clear pricing."
35
+ default_og_image: "/images/og-default.jpg"
36
+ twitter_handle: ""
@@ -0,0 +1,3 @@
1
+ daisyui:
2
+ theme: "corporate"
3
+ dark_theme: "business"
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "About"
3
+ description: "About <%= business_name %>."
4
+ path: "/about"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "A plumbing team focused on clean work, clear updates, and durable results."
8
+ sections:
9
+ - type: rich_text
10
+ ---
11
+
12
+ <%= business_name %> helps homeowners solve plumbing problems quickly and confidently.
13
+
14
+ We focus on practical recommendations, quality materials, and workmanship that lasts.
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: "Contact"
3
+ description: "Request plumbing service from <%= business_name %>."
4
+ path: "/contact"
5
+ template: "contact"
6
+ show_title: true
7
+ lead: "Share your plumbing issue and we will respond with next steps."
8
+ sections:
9
+ - type: contact_form
10
+ heading: "Request plumbing service"
11
+ body: "Include your issue, address area, and preferred appointment times."
12
+ ---
@@ -0,0 +1,55 @@
1
+ ---
2
+ title: "Home"
3
+ description: "<%= business_name %> delivers fast, reliable plumbing services."
4
+ path: "/"
5
+ template: "landing"
6
+ show_title: false
7
+ lead: "Local plumbing support for repairs, installations, and maintenance."
8
+ sections:
9
+ - type: hero
10
+ kicker: "Licensed plumbers"
11
+ heading: "Plumbing repairs and installs done right"
12
+ subheading: "From leaks and clogs to fixture upgrades, we deliver clear timelines and dependable workmanship."
13
+ primary_cta:
14
+ label: "Get a quote"
15
+ page: "contact"
16
+ secondary_cta:
17
+ label: "View services"
18
+ page: "services"
19
+ - type: proof_strip
20
+ items:
21
+ - "Licensed & insured"
22
+ - "5-star rated"
23
+ - "Same-day response"
24
+ - type: feature_cards
25
+ heading: "Plumbing services"
26
+ items:
27
+ - title: "Leak diagnosis & repair"
28
+ description: "Pinpoint leaks quickly and fix them before they spread damage."
29
+ - title: "Drain cleaning"
30
+ description: "Clear clogs safely and restore normal flow."
31
+ - title: "Fixture replacement"
32
+ description: "Install faucets, toilets, and valves with clean finishes."
33
+ - type: process_steps
34
+ heading: "How it works"
35
+ items:
36
+ - title: "Describe the issue"
37
+ description: "Tell us what is happening and when you are available."
38
+ - title: "Get a transparent quote"
39
+ description: "We outline scope, pricing, and expected turnaround."
40
+ - title: "Complete the repair"
41
+ description: "We fix the issue and verify performance before we leave."
42
+ - type: testimonials
43
+ heading: "What customers say"
44
+ items:
45
+ - quote: "Quick response and a clean, professional repair."
46
+ author: "Morgan T."
47
+ - quote: "Explained everything clearly and fixed it first visit."
48
+ author: "Riley S."
49
+ - type: cta_band
50
+ heading: "Need a plumber now?"
51
+ body: "Send your details and we will follow up with availability."
52
+ cta:
53
+ label: "Contact us"
54
+ page: "contact"
55
+ ---
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: "Privacy Policy"
3
+ description: "How <%= business_name %> collects, uses, and protects your information."
4
+ path: "/privacy"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "This page explains what information we collect, how we use it, and your choices."
8
+ sections:
9
+ - type: rich_text
10
+ ---
11
+
12
+ ## Information We Collect
13
+ When you use our contact form, we may collect your name, email address, phone number, and the details in your message.
14
+
15
+ Our form also includes a hidden `website` field used as an anti-spam honeypot. Legitimate visitors should leave this field empty.
16
+
17
+ ## How We Use Information
18
+ We use inquiry details to:
19
+
20
+ - respond to your questions and requests
21
+ - follow up about potential work
22
+ - keep basic records of conversations and project requests
23
+ - improve service and communication
24
+
25
+ ## Sharing and Disclosure
26
+ We do not sell or rent your personal information.
27
+
28
+ We may share information with trusted service providers only when needed to operate this site or process communications (for example, email delivery). We may also disclose information if required by law.
29
+
30
+ ## Retention
31
+ We keep inquiry information only as long as needed for legitimate business purposes, legal compliance, and recordkeeping. When information is no longer needed, we delete it or anonymize it.
32
+
33
+ ## Security
34
+ We use reasonable technical and organizational safeguards to protect personal information. No internet transmission or storage method is 100% secure, but we work to reduce risk.
35
+
36
+ ## Your Choices
37
+ You can request access, correction, or deletion of personal information you have submitted to us.
38
+
39
+ ## Changes to This Policy
40
+ We may update this Privacy Policy from time to time. Updates are effective when posted on this page.
41
+
42
+ ## Contact
43
+ For privacy questions or requests, use the contact details listed on the [Contact page](/contact).
@@ -0,0 +1,29 @@
1
+ ---
2
+ title: "Services"
3
+ description: "Plumbing services from <%= business_name %>."
4
+ path: "/services"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "Plumbing solutions designed for long-term reliability."
8
+ sections:
9
+ - type: feature_cards
10
+ heading: "Service lineup"
11
+ items:
12
+ - title: "Leak repairs"
13
+ description: "Repair visible and hidden leaks in fixtures, lines, and valves."
14
+ - title: "Drain and sewer service"
15
+ description: "Remove blockages and restore dependable drainage."
16
+ - title: "Water heater support"
17
+ description: "Maintenance, replacement, and installation guidance."
18
+ - title: "Kitchen and bath fixtures"
19
+ description: "Install and replace sinks, faucets, and toilets."
20
+ - type: faq
21
+ heading: "Common plumbing questions"
22
+ items:
23
+ - question: "Do you handle emergency leaks?"
24
+ answer: "Yes. We prioritize urgent leak calls when same-day slots are available."
25
+ - question: "Can you replace old fixtures?"
26
+ answer: "Absolutely. We can source and install new fixtures or work with ones you provide."
27
+ - question: "Do you provide upfront pricing?"
28
+ answer: "Yes. We provide estimates before starting work whenever possible."
29
+ ---
@@ -0,0 +1,36 @@
1
+ site:
2
+ locale: "en"
3
+ name: "<%= business_name %>"
4
+ base_url: "https://example.com"
5
+
6
+ navigation:
7
+ primary:
8
+ - label: "Home"
9
+ page: "home"
10
+ - label: "Services"
11
+ page: "services"
12
+ - label: "About"
13
+ page: "about"
14
+ - label: "Contact"
15
+ page: "contact"
16
+ footer:
17
+ - label: "Privacy"
18
+ page: "privacy"
19
+
20
+ branding:
21
+ logo_text: "<%= business_name %>"
22
+ primary_cta:
23
+ label: "Get a quote"
24
+ page: "contact"
25
+
26
+ contact:
27
+ page: "contact"
28
+ recipient_email: "leads@example.com"
29
+ phone: "(555) 123-4567"
30
+ email: "hello@example.com"
31
+
32
+ seo:
33
+ default_title: "<%= business_name %>"
34
+ default_description: "Professional plumbing services with fast response and clear pricing."
35
+ default_og_image: "/images/og-default.jpg"
36
+ twitter_handle: ""
@@ -0,0 +1,3 @@
1
+ daisyui:
2
+ theme: "lofi"
3
+ dark_theme: "dracula"
@@ -0,0 +1,26 @@
1
+ ---
2
+ title: "About"
3
+ description: "About <%= business_name %>."
4
+ path: "/about"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "I partner with teams that value clear strategy, fast execution, and measurable impact."
8
+ sections:
9
+ - type: rich_text
10
+ - type: stats
11
+ heading: "At a glance"
12
+ items:
13
+ - label: "Years shipping"
14
+ value: "8+"
15
+ description: "Across product, marketing, and service websites"
16
+ - label: "Projects delivered"
17
+ value: "60+"
18
+ description: "From solo founder pages to multi-page brand sites"
19
+ - label: "Typical kickoff"
20
+ value: "7 days"
21
+ description: "From scope agreement to implementation start"
22
+ ---
23
+
24
+ I work across design and engineering, with a strong focus on sites that support real business goals.
25
+
26
+ My process emphasizes clarity, collaboration, and shipping useful increments quickly.
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: "Contact"
3
+ description: "Contact <%= business_name %>."
4
+ path: "/contact"
5
+ template: "contact"
6
+ show_title: true
7
+ lead: "Tell me what you are building, your timeline, and how I can help."
8
+ sections:
9
+ - type: contact_form
10
+ heading: "Start a project"
11
+ body: "Share your goals, current assets, and desired launch window."
12
+ ---
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: "Home"
3
+ description: "Portfolio home for <%= business_name %>."
4
+ path: "/"
5
+ template: "landing"
6
+ show_title: false
7
+ lead: "A creator portfolio focused on selected work and measurable outcomes."
8
+ sections:
9
+ - type: hero
10
+ kicker: "Independent creator"
11
+ heading: "I design and build digital products"
12
+ subheading: "Selected work across web design, development, and conversion-focused experiences."
13
+ primary_cta:
14
+ label: "View work"
15
+ page: "work"
16
+ secondary_cta:
17
+ label: "Start a project"
18
+ page: "contact"
19
+ - type: proof_strip
20
+ items:
21
+ - "Strategy + execution"
22
+ - "Code + design fluency"
23
+ - "Measured outcomes"
24
+ - type: project_cards
25
+ heading: "Featured work"
26
+ items:
27
+ - title: "Service Business Rebrand"
28
+ summary: "Repositioned offer messaging and rebuilt site architecture."
29
+ stack: "Rails, Tailwind, Figma"
30
+ url: "https://example.com/work/rebrand"
31
+ outcome: "Increased quote requests by 36% over one quarter."
32
+ - title: "Creator Landing Funnel"
33
+ summary: "Designed a focused launch funnel for a digital product release."
34
+ stack: "Rails, Stimulus, email automation"
35
+ url: "https://example.com/work/funnel"
36
+ outcome: "Converted 8.4% of warm visitors to buyers on launch week."
37
+ - type: cta_band
38
+ heading: "Need a collaborator for your next launch?"
39
+ body: "I take projects from concept to shipped product with direct, hands-on execution."
40
+ cta:
41
+ label: "Get in touch"
42
+ page: "contact"
43
+ ---
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: "Privacy Policy"
3
+ description: "How <%= business_name %> collects, uses, and protects your information."
4
+ path: "/privacy"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "This page explains what information we collect, how we use it, and your choices."
8
+ sections:
9
+ - type: rich_text
10
+ ---
11
+
12
+ ## Information We Collect
13
+ When you use our contact form, we may collect your name, email address, phone number, and the details in your message.
14
+
15
+ Our form also includes a hidden `website` field used as an anti-spam honeypot. Legitimate visitors should leave this field empty.
16
+
17
+ ## How We Use Information
18
+ We use inquiry details to:
19
+
20
+ - respond to your questions and requests
21
+ - follow up about potential work
22
+ - keep basic records of conversations and project requests
23
+ - improve service and communication
24
+
25
+ ## Sharing and Disclosure
26
+ We do not sell or rent your personal information.
27
+
28
+ We may share information with trusted service providers only when needed to operate this site or process communications (for example, email delivery). We may also disclose information if required by law.
29
+
30
+ ## Retention
31
+ We keep inquiry information only as long as needed for legitimate business purposes, legal compliance, and recordkeeping. When information is no longer needed, we delete it or anonymize it.
32
+
33
+ ## Security
34
+ We use reasonable technical and organizational safeguards to protect personal information. No internet transmission or storage method is 100% secure, but we work to reduce risk.
35
+
36
+ ## Your Choices
37
+ You can request access, correction, or deletion of personal information you have submitted to us.
38
+
39
+ ## Changes to This Policy
40
+ We may update this Privacy Policy from time to time. Updates are effective when posted on this page.
41
+
42
+ ## Contact
43
+ For privacy questions or requests, use the contact details listed on the [Contact page](/contact).
@@ -0,0 +1,27 @@
1
+ ---
2
+ title: "Work"
3
+ description: "Project portfolio for <%= business_name %>."
4
+ path: "/work"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "A broader view of shipped work, stack choices, and outcomes."
8
+ sections:
9
+ - type: project_cards
10
+ heading: "Project archive"
11
+ items:
12
+ - title: "Regional Home Services Platform"
13
+ summary: "Consolidated multiple service brands into one conversion-first platform."
14
+ stack: "Rails, PostgreSQL, Tailwind"
15
+ url: "https://example.com/work/regional-platform"
16
+ outcome: "Improved lead quality and cut admin overhead by 20%."
17
+ - title: "Studio Portfolio Redesign"
18
+ summary: "Built a modular section-based portfolio with case study templates."
19
+ stack: "Rails, Markdown content, daisyUI"
20
+ url: "https://example.com/work/studio"
21
+ outcome: "Reduced content publishing time from hours to minutes."
22
+ - title: "SaaS Marketing Site Refresh"
23
+ summary: "Reworked homepage narrative and conversion paths for trial signup."
24
+ stack: "Rails, analytics instrumentation"
25
+ url: "https://example.com/work/saas"
26
+ outcome: "Lifted trial signup conversion by 22%."
27
+ ---
@@ -0,0 +1,36 @@
1
+ site:
2
+ locale: "en"
3
+ name: "<%= business_name %>"
4
+ base_url: "https://example.com"
5
+
6
+ navigation:
7
+ primary:
8
+ - label: "Home"
9
+ page: "home"
10
+ - label: "Work"
11
+ page: "work"
12
+ - label: "About"
13
+ page: "about"
14
+ - label: "Contact"
15
+ page: "contact"
16
+ footer:
17
+ - label: "Privacy"
18
+ page: "privacy"
19
+
20
+ branding:
21
+ logo_text: "<%= business_name %>"
22
+ primary_cta:
23
+ label: "Start a project"
24
+ page: "contact"
25
+
26
+ contact:
27
+ page: "contact"
28
+ recipient_email: "leads@example.com"
29
+ phone: "(555) 123-4567"
30
+ email: "hello@example.com"
31
+
32
+ seo:
33
+ default_title: "<%= business_name %>"
34
+ default_description: "Portfolio of selected digital projects, process, and outcomes."
35
+ default_og_image: "/images/og-default.jpg"
36
+ twitter_handle: ""
@@ -0,0 +1,3 @@
1
+ daisyui:
2
+ theme: "winter"
3
+ dark_theme: "night"
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: "About"
3
+ description: "About <%= business_name %>."
4
+ path: "/about"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "A practical delivery partner for businesses that want websites to drive real revenue."
8
+ sections:
9
+ - type: rich_text
10
+ ---
11
+
12
+ <%= business_name %> is focused on practical software delivery for service businesses and founder-led teams.
13
+
14
+ My model is simple: build quickly, keep communication direct, and stay accountable after launch through hosting and maintenance.
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: "Contact"
3
+ description: "Start a project with <%= business_name %>."
4
+ path: "/contact"
5
+ template: "contact"
6
+ show_title: true
7
+ lead: "Share your goals, current site status, and timeline."
8
+ sections:
9
+ - type: contact_form
10
+ heading: "Book a discovery call"
11
+ body: "Tell me what you need built, hosted, or improved and I will follow up with next steps."
12
+ ---
@@ -0,0 +1,48 @@
1
+ ---
2
+ title: "Home"
3
+ description: "<%= business_name %> builds, hosts, and maintains conversion-focused websites."
4
+ path: "/"
5
+ template: "landing"
6
+ show_title: false
7
+ lead: "I build business websites end-to-end and stay involved after launch."
8
+ sections:
9
+ - type: hero
10
+ kicker: "Software contracting"
11
+ heading: "Launch faster with one technical partner"
12
+ subheading: "I design, build, host, and maintain high-conversion websites so you can focus on sales and operations."
13
+ primary_cta:
14
+ label: "Book a discovery call"
15
+ page: "contact"
16
+ secondary_cta:
17
+ label: "View past projects"
18
+ page: "projects"
19
+ - type: proof_strip
20
+ items:
21
+ - "Senior full-stack delivery"
22
+ - "Hosting and maintenance included"
23
+ - "Direct founder communication"
24
+ - type: feature_cards
25
+ heading: "What I handle"
26
+ items:
27
+ - title: "Build"
28
+ description: "Custom brochure and lead-gen sites with clear conversion goals."
29
+ - title: "Host"
30
+ description: "Production hosting setup, deploys, monitoring, and backups."
31
+ - title: "Maintain"
32
+ description: "Ongoing updates, fixes, and roadmap improvements after launch."
33
+ - type: process_steps
34
+ heading: "Delivery model"
35
+ items:
36
+ - title: "Discovery"
37
+ description: "Define offer, pages, conversion actions, and timeline."
38
+ - title: "Implementation"
39
+ description: "Ship quickly with frequent previews and tight feedback loops."
40
+ - title: "Support"
41
+ description: "Keep your site secure, current, and performing post-launch."
42
+ - type: cta_band
43
+ heading: "Need a site that actually converts?"
44
+ body: "Let’s scope your goals and launch plan in one short call."
45
+ cta:
46
+ label: "Start a conversation"
47
+ page: "contact"
48
+ ---
@@ -0,0 +1,57 @@
1
+ ---
2
+ title: "Pricing"
3
+ description: "Starting-from pricing for software contracting services."
4
+ path: "/pricing"
5
+ template: "standard"
6
+ show_title: true
7
+ lead: "Transparent starting points so you can plan budget and timeline quickly."
8
+ sections:
9
+ - type: pricing_cards
10
+ heading: "Starting-from pricing"
11
+ items:
12
+ - name: "Launch Site"
13
+ starting_price: "$2,500"
14
+ description: "For small businesses that need a conversion-ready site quickly."
15
+ includes:
16
+ - "Core pages tailored to your offer"
17
+ - "Contact funnel setup"
18
+ - "Performance and SEO baseline"
19
+ cta:
20
+ label: "Ask about launch timelines"
21
+ page: "contact"
22
+ - name: "Growth Site"
23
+ starting_price: "$5,000"
24
+ description: "For teams that need richer pages, content structure, and reporting."
25
+ includes:
26
+ - "Expanded page architecture"
27
+ - "Reusable section library"
28
+ - "Analytics event instrumentation"
29
+ cta:
30
+ label: "Discuss your scope"
31
+ page: "contact"
32
+ - name: "Ongoing Support"
33
+ starting_price: "$350/mo"
34
+ description: "For ongoing hosting, maintenance, and iterative improvements."
35
+ includes:
36
+ - "Hosting and deploy pipeline"
37
+ - "Security and dependency updates"
38
+ - "Monthly optimization tasks"
39
+ cta:
40
+ label: "See if support is a fit"
41
+ page: "contact"
42
+ - type: faq
43
+ heading: "Pricing questions"
44
+ items:
45
+ - question: "Are these fixed package prices?"
46
+ answer: "No. They are starting points. Final pricing depends on scope, integrations, and timeline."
47
+ - question: "Do you require long-term contracts?"
48
+ answer: "No long-term contract is required for one-off builds."
49
+ - question: "Can you work with existing branding/content?"
50
+ answer: "Yes. I can build from existing assets or help refine them as part of the engagement."
51
+ - type: cta_band
52
+ heading: "Want an exact quote?"
53
+ body: "Share your goals and I will respond with a scoped estimate."
54
+ cta:
55
+ label: "Request pricing"
56
+ page: "contact"
57
+ ---