@aws505/sheetsite 1.0.0
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.
- package/README.md +105 -0
- package/dist/components/index.js +1696 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/index.mjs +1630 -0
- package/dist/components/index.mjs.map +1 -0
- package/dist/config/index.js +1840 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/index.mjs +1793 -0
- package/dist/config/index.mjs.map +1 -0
- package/dist/data/index.js +1296 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/index.mjs +1220 -0
- package/dist/data/index.mjs.map +1 -0
- package/dist/index.js +5433 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +5285 -0
- package/dist/index.mjs.map +1 -0
- package/dist/seo/index.js +187 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/index.mjs +155 -0
- package/dist/seo/index.mjs.map +1 -0
- package/dist/theme/index.js +552 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/index.mjs +526 -0
- package/dist/theme/index.mjs.map +1 -0
- package/package.json +96 -0
- package/src/components/index.ts +41 -0
- package/src/components/layout/Footer.tsx +234 -0
- package/src/components/layout/Header.tsx +134 -0
- package/src/components/sections/FAQ.tsx +178 -0
- package/src/components/sections/Gallery.tsx +107 -0
- package/src/components/sections/Hero.tsx +202 -0
- package/src/components/sections/Hours.tsx +225 -0
- package/src/components/sections/Services.tsx +216 -0
- package/src/components/sections/Testimonials.tsx +184 -0
- package/src/components/ui/Button.tsx +158 -0
- package/src/components/ui/Card.tsx +162 -0
- package/src/components/ui/Icons.tsx +508 -0
- package/src/config/index.ts +207 -0
- package/src/config/presets/generic.ts +153 -0
- package/src/config/presets/home-kitchen.ts +154 -0
- package/src/config/presets/index.ts +708 -0
- package/src/config/presets/professional.ts +165 -0
- package/src/config/presets/repair.ts +160 -0
- package/src/config/presets/restaurant.ts +162 -0
- package/src/config/presets/salon.ts +178 -0
- package/src/config/presets/tailor.ts +159 -0
- package/src/config/types.ts +314 -0
- package/src/data/csv-parser.ts +154 -0
- package/src/data/defaults.ts +202 -0
- package/src/data/google-drive.ts +148 -0
- package/src/data/index.ts +535 -0
- package/src/data/sheets.ts +709 -0
- package/src/data/types.ts +379 -0
- package/src/seo/index.ts +272 -0
- package/src/theme/colors.ts +351 -0
- package/src/theme/index.ts +249 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Professional Services Business Preset
|
|
3
|
+
* For accountants, lawyers, consultants, etc.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { BusinessPreset } from '../types';
|
|
7
|
+
|
|
8
|
+
export const professionalPreset: BusinessPreset = {
|
|
9
|
+
type: 'accountant',
|
|
10
|
+
name: 'Professional Services',
|
|
11
|
+
description: 'Configuration for accountants, lawyers, consultants, and other professional service providers',
|
|
12
|
+
|
|
13
|
+
config: {
|
|
14
|
+
businessType: 'accountant',
|
|
15
|
+
theme: {
|
|
16
|
+
preset: 'cool-blue',
|
|
17
|
+
borderRadius: 'md',
|
|
18
|
+
shadows: 'sm',
|
|
19
|
+
},
|
|
20
|
+
pages: {
|
|
21
|
+
home: {
|
|
22
|
+
enabled: true,
|
|
23
|
+
sections: [
|
|
24
|
+
'hero',
|
|
25
|
+
'services',
|
|
26
|
+
'about-preview',
|
|
27
|
+
'testimonials',
|
|
28
|
+
'faq',
|
|
29
|
+
'contact-form',
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
about: { enabled: true },
|
|
33
|
+
services: { enabled: true, title: 'Our Services' },
|
|
34
|
+
team: { enabled: true, title: 'Our Team' },
|
|
35
|
+
faq: { enabled: true },
|
|
36
|
+
contact: { enabled: true },
|
|
37
|
+
privacy: { enabled: true },
|
|
38
|
+
},
|
|
39
|
+
seo: {
|
|
40
|
+
titleTemplate: '%s | Professional Services',
|
|
41
|
+
keywords: ['professional services', 'consulting', 'expert advice', 'local business'],
|
|
42
|
+
jsonLdType: 'ProfessionalService',
|
|
43
|
+
},
|
|
44
|
+
contactForm: {
|
|
45
|
+
enabled: true,
|
|
46
|
+
fields: {
|
|
47
|
+
name: true,
|
|
48
|
+
email: true,
|
|
49
|
+
phone: true,
|
|
50
|
+
service: true,
|
|
51
|
+
message: true,
|
|
52
|
+
},
|
|
53
|
+
successMessage: 'Thank you for your inquiry. We\'ll be in touch within one business day.',
|
|
54
|
+
},
|
|
55
|
+
features: {
|
|
56
|
+
mobileCallBar: true,
|
|
57
|
+
openStatus: true,
|
|
58
|
+
mapEmbed: true,
|
|
59
|
+
socialLinks: true,
|
|
60
|
+
bookingButton: true,
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
defaults: {
|
|
65
|
+
business: {
|
|
66
|
+
tagline: 'Expert Guidance You Can Trust',
|
|
67
|
+
description: 'Professional services delivered with expertise, integrity, and a personal touch.',
|
|
68
|
+
priceRange: '$$$',
|
|
69
|
+
},
|
|
70
|
+
services: [
|
|
71
|
+
{ id: 's1', title: 'Initial Consultation', description: 'Comprehensive assessment of your needs and goals', priceNote: 'Free', icon: 'chat', sortOrder: 1 },
|
|
72
|
+
{ id: 's2', title: 'Core Services', description: 'Our primary service offering tailored to your needs', priceNote: 'From $150/hour', icon: 'briefcase', sortOrder: 2 },
|
|
73
|
+
{ id: 's3', title: 'Comprehensive Package', description: 'Full-service solution with ongoing support', priceNote: 'Custom quote', icon: 'package', sortOrder: 3 },
|
|
74
|
+
{ id: 's4', title: 'Ongoing Support', description: 'Monthly retainer for continuous guidance', priceNote: 'From $500/month', icon: 'calendar', sortOrder: 4 },
|
|
75
|
+
],
|
|
76
|
+
team: [
|
|
77
|
+
{ id: 't1', name: 'Principal Name', role: 'Principal / Founder', bio: 'Over 20 years of experience helping clients achieve their goals.', sortOrder: 1 },
|
|
78
|
+
{ id: 't2', name: 'Associate Name', role: 'Senior Associate', bio: 'Specialized expertise in key service areas.', sortOrder: 2 },
|
|
79
|
+
],
|
|
80
|
+
faq: [
|
|
81
|
+
{ id: 'f1', question: 'What is your availability?', answer: 'We maintain flexible hours to accommodate our clients\' schedules. Evening and weekend appointments are available upon request.', sortOrder: 1 },
|
|
82
|
+
{ id: 'f2', question: 'Do you offer remote consultations?', answer: 'Yes, we offer both in-person and virtual consultations via video conference for your convenience.', sortOrder: 2 },
|
|
83
|
+
{ id: 'f3', question: 'What are your fees?', answer: 'Fees vary based on the complexity of services required. We provide detailed fee estimates after our initial consultation.', sortOrder: 3 },
|
|
84
|
+
{ id: 'f4', question: 'What forms of payment do you accept?', answer: 'We accept checks, credit cards, and bank transfers. Payment plans may be available for certain services.', sortOrder: 4 },
|
|
85
|
+
{ id: 'f5', question: 'How do I get started?', answer: 'Contact us to schedule a free initial consultation. We\'ll discuss your needs and how we can help.', sortOrder: 5 },
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
sheetTemplate: {
|
|
90
|
+
tabs: [
|
|
91
|
+
{
|
|
92
|
+
name: 'business',
|
|
93
|
+
required: true,
|
|
94
|
+
columns: [
|
|
95
|
+
{ name: 'key', description: 'Setting name', example: 'name', required: true },
|
|
96
|
+
{ name: 'value', description: 'Setting value', example: 'Smith & Associates', required: true },
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'hours',
|
|
101
|
+
required: true,
|
|
102
|
+
columns: [
|
|
103
|
+
{ name: 'day', description: 'Day of week', example: 'Monday', required: true },
|
|
104
|
+
{ name: 'open', description: 'Opening time', example: '9:00 AM', required: false },
|
|
105
|
+
{ name: 'close', description: 'Closing time', example: '5:00 PM', required: false },
|
|
106
|
+
{ name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: 'services',
|
|
111
|
+
required: true,
|
|
112
|
+
columns: [
|
|
113
|
+
{ name: 'title', description: 'Service name', example: 'Tax Preparation', required: true },
|
|
114
|
+
{ name: 'description', description: 'Service description', example: 'Individual and business tax returns', required: false },
|
|
115
|
+
{ name: 'price_note', description: 'Pricing info', example: 'From $200', required: false },
|
|
116
|
+
{ name: 'icon', description: 'Icon name', example: 'calculator', required: false },
|
|
117
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'team',
|
|
122
|
+
required: false,
|
|
123
|
+
columns: [
|
|
124
|
+
{ name: 'name', description: 'Team member name', example: 'John Smith, CPA', required: true },
|
|
125
|
+
{ name: 'role', description: 'Role/title', example: 'Principal', required: false },
|
|
126
|
+
{ name: 'bio', description: 'Short bio', example: '20+ years of experience...', required: false },
|
|
127
|
+
{ name: 'image_url', description: 'Photo URL', example: 'https://drive.google.com/...', required: false },
|
|
128
|
+
{ name: 'email', description: 'Direct email', example: 'john@example.com', required: false },
|
|
129
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: 'testimonials',
|
|
134
|
+
required: false,
|
|
135
|
+
columns: [
|
|
136
|
+
{ name: 'quote', description: 'Client testimonial', example: 'Exceptional service and expertise.', required: true },
|
|
137
|
+
{ name: 'name', description: 'Client name', example: 'David L.', required: true },
|
|
138
|
+
{ name: 'context', description: 'Service context', example: 'Tax planning', required: false },
|
|
139
|
+
{ name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },
|
|
140
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
name: 'faq',
|
|
145
|
+
required: false,
|
|
146
|
+
columns: [
|
|
147
|
+
{ name: 'question', description: 'Question text', example: 'What are your fees?', required: true },
|
|
148
|
+
{ name: 'answer', description: 'Answer text', example: 'Fees vary based on complexity...', required: true },
|
|
149
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
iconSuggestions: ['briefcase', 'calculator', 'scale', 'shield', 'document', 'chart', 'users', 'check'],
|
|
156
|
+
|
|
157
|
+
imageSuggestions: [
|
|
158
|
+
'Professional headshots',
|
|
159
|
+
'Modern office interior',
|
|
160
|
+
'Team meeting',
|
|
161
|
+
'Client consultation',
|
|
162
|
+
'Professional at work',
|
|
163
|
+
'Office building exterior',
|
|
164
|
+
],
|
|
165
|
+
};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repair Shop Business Preset
|
|
3
|
+
* For shoe repair, electronics repair, watch repair, etc.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { BusinessPreset } from '../types';
|
|
7
|
+
|
|
8
|
+
export const repairPreset: BusinessPreset = {
|
|
9
|
+
type: 'shoe-repair',
|
|
10
|
+
name: 'Repair Shop',
|
|
11
|
+
description: 'Configuration for repair shops (shoe, electronics, watch, etc.)',
|
|
12
|
+
|
|
13
|
+
config: {
|
|
14
|
+
businessType: 'shoe-repair',
|
|
15
|
+
theme: {
|
|
16
|
+
preset: 'warm-brown',
|
|
17
|
+
borderRadius: 'md',
|
|
18
|
+
shadows: 'md',
|
|
19
|
+
},
|
|
20
|
+
pages: {
|
|
21
|
+
home: {
|
|
22
|
+
enabled: true,
|
|
23
|
+
sections: [
|
|
24
|
+
'hero',
|
|
25
|
+
'services',
|
|
26
|
+
'how-it-works',
|
|
27
|
+
'gallery',
|
|
28
|
+
'testimonials',
|
|
29
|
+
'hours',
|
|
30
|
+
'location',
|
|
31
|
+
'faq',
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
about: { enabled: true },
|
|
35
|
+
services: { enabled: true, title: 'Our Services' },
|
|
36
|
+
gallery: { enabled: true, title: 'Our Work' },
|
|
37
|
+
faq: { enabled: true },
|
|
38
|
+
contact: { enabled: true },
|
|
39
|
+
privacy: { enabled: true },
|
|
40
|
+
},
|
|
41
|
+
seo: {
|
|
42
|
+
titleTemplate: '%s | Expert Repair Services',
|
|
43
|
+
keywords: ['repair', 'restoration', 'fix', 'local repair shop', 'quality repairs'],
|
|
44
|
+
jsonLdType: 'LocalBusiness',
|
|
45
|
+
},
|
|
46
|
+
contactForm: {
|
|
47
|
+
enabled: true,
|
|
48
|
+
fields: {
|
|
49
|
+
name: true,
|
|
50
|
+
email: true,
|
|
51
|
+
phone: true,
|
|
52
|
+
service: true,
|
|
53
|
+
message: true,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
features: {
|
|
57
|
+
mobileCallBar: true,
|
|
58
|
+
openStatus: true,
|
|
59
|
+
mapEmbed: true,
|
|
60
|
+
socialLinks: true,
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
defaults: {
|
|
65
|
+
business: {
|
|
66
|
+
tagline: 'Quality Repairs, Trusted Service',
|
|
67
|
+
description: 'Expert repair services with attention to detail and fair pricing.',
|
|
68
|
+
priceRange: '$$',
|
|
69
|
+
},
|
|
70
|
+
services: [
|
|
71
|
+
{ id: 's1', title: 'Basic Repair', description: 'Standard repairs and fixes', priceNote: 'From $20', icon: 'wrench', sortOrder: 1 },
|
|
72
|
+
{ id: 's2', title: 'Restoration', description: 'Full restoration to like-new condition', priceNote: 'By quote', icon: 'sparkles', sortOrder: 2 },
|
|
73
|
+
{ id: 's3', title: 'Cleaning & Care', description: 'Professional cleaning and maintenance', priceNote: 'From $15', icon: 'droplet', sortOrder: 3 },
|
|
74
|
+
{ id: 's4', title: 'Custom Work', description: 'Specialized modifications and custom requests', priceNote: 'By consultation', icon: 'star', sortOrder: 4 },
|
|
75
|
+
{ id: 's5', title: 'Rush Service', description: 'Same-day or next-day service', priceNote: '+50%', icon: 'clock', sortOrder: 5 },
|
|
76
|
+
],
|
|
77
|
+
faq: [
|
|
78
|
+
{ id: 'f1', question: 'How long do repairs typically take?', answer: 'Standard repairs are usually completed within 3-5 business days. Rush service is available for urgent needs at an additional cost.', sortOrder: 1 },
|
|
79
|
+
{ id: 'f2', question: 'Do you provide free estimates?', answer: 'Yes! We provide free estimates for all repairs. Just bring in your item for an assessment.', sortOrder: 2 },
|
|
80
|
+
{ id: 'f3', question: 'Do you offer a warranty on repairs?', answer: 'Yes, all our repairs come with a 90-day warranty against workmanship defects.', sortOrder: 3 },
|
|
81
|
+
{ id: 'f4', question: 'What brands do you work with?', answer: 'We work with all major brands and have experience with both common and specialty items.', sortOrder: 4 },
|
|
82
|
+
{ id: 'f5', question: 'Can you match colors/materials?', answer: 'We maintain an extensive inventory and can often match colors and materials closely. Bring in your item for assessment.', sortOrder: 5 },
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
|
|
86
|
+
sheetTemplate: {
|
|
87
|
+
tabs: [
|
|
88
|
+
{
|
|
89
|
+
name: 'business',
|
|
90
|
+
required: true,
|
|
91
|
+
columns: [
|
|
92
|
+
{ name: 'key', description: 'Setting name', example: 'name', required: true },
|
|
93
|
+
{ name: 'value', description: 'Setting value', example: 'Quality Repair Shop', required: true },
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'hours',
|
|
98
|
+
required: true,
|
|
99
|
+
columns: [
|
|
100
|
+
{ name: 'day', description: 'Day of week', example: 'Monday', required: true },
|
|
101
|
+
{ name: 'open', description: 'Opening time', example: '9:00 AM', required: false },
|
|
102
|
+
{ name: 'close', description: 'Closing time', example: '6:00 PM', required: false },
|
|
103
|
+
{ name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'services',
|
|
108
|
+
required: true,
|
|
109
|
+
columns: [
|
|
110
|
+
{ name: 'title', description: 'Service name', example: 'Basic Repair', required: true },
|
|
111
|
+
{ name: 'description', description: 'Service description', example: 'Standard repairs and fixes', required: false },
|
|
112
|
+
{ name: 'price_note', description: 'Pricing info', example: 'From $20', required: false },
|
|
113
|
+
{ name: 'icon', description: 'Icon name', example: 'wrench', required: false },
|
|
114
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'gallery',
|
|
119
|
+
required: false,
|
|
120
|
+
columns: [
|
|
121
|
+
{ name: 'image_url', description: 'Image URL', example: 'https://drive.google.com/...', required: true },
|
|
122
|
+
{ name: 'alt', description: 'Image description', example: 'Before and after repair', required: false },
|
|
123
|
+
{ name: 'caption', description: 'Caption text', example: 'Restored to like-new condition', required: false },
|
|
124
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'testimonials',
|
|
129
|
+
required: false,
|
|
130
|
+
columns: [
|
|
131
|
+
{ name: 'quote', description: 'Customer review', example: 'Amazing work! Like new again.', required: true },
|
|
132
|
+
{ name: 'name', description: 'Customer name', example: 'Mike T.', required: true },
|
|
133
|
+
{ name: 'context', description: 'Service context', example: 'Watch restoration', required: false },
|
|
134
|
+
{ name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },
|
|
135
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
136
|
+
],
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'faq',
|
|
140
|
+
required: false,
|
|
141
|
+
columns: [
|
|
142
|
+
{ name: 'question', description: 'Question text', example: 'How long do repairs take?', required: true },
|
|
143
|
+
{ name: 'answer', description: 'Answer text', example: '3-5 business days typically', required: true },
|
|
144
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
iconSuggestions: ['wrench', 'hammer', 'sparkles', 'clock', 'star', 'shield', 'check', 'tool'],
|
|
151
|
+
|
|
152
|
+
imageSuggestions: [
|
|
153
|
+
'Before and after repair shots',
|
|
154
|
+
'Craftsman at work',
|
|
155
|
+
'Organized workshop',
|
|
156
|
+
'Close-up of quality workmanship',
|
|
157
|
+
'Tools of the trade',
|
|
158
|
+
'Happy customer with repaired item',
|
|
159
|
+
],
|
|
160
|
+
};
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restaurant / Cafe Business Preset
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { BusinessPreset } from '../types';
|
|
6
|
+
|
|
7
|
+
export const restaurantPreset: BusinessPreset = {
|
|
8
|
+
type: 'restaurant',
|
|
9
|
+
name: 'Restaurant & Cafe',
|
|
10
|
+
description: 'Configuration for restaurants, cafes, and dining establishments',
|
|
11
|
+
|
|
12
|
+
config: {
|
|
13
|
+
businessType: 'restaurant',
|
|
14
|
+
theme: {
|
|
15
|
+
preset: 'warm-amber',
|
|
16
|
+
borderRadius: 'lg',
|
|
17
|
+
shadows: 'md',
|
|
18
|
+
},
|
|
19
|
+
pages: {
|
|
20
|
+
home: {
|
|
21
|
+
enabled: true,
|
|
22
|
+
sections: [
|
|
23
|
+
'hero',
|
|
24
|
+
'menu',
|
|
25
|
+
'gallery',
|
|
26
|
+
'testimonials',
|
|
27
|
+
'hours',
|
|
28
|
+
'location',
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
about: { enabled: true, title: 'Our Story' },
|
|
32
|
+
menu: { enabled: true, title: 'Menu' },
|
|
33
|
+
gallery: { enabled: true, title: 'Gallery' },
|
|
34
|
+
contact: { enabled: true },
|
|
35
|
+
privacy: { enabled: true },
|
|
36
|
+
},
|
|
37
|
+
seo: {
|
|
38
|
+
titleTemplate: '%s | Delicious Dining Experience',
|
|
39
|
+
keywords: ['restaurant', 'dining', 'food', 'cuisine', 'local restaurant', 'family dining'],
|
|
40
|
+
jsonLdType: 'Restaurant',
|
|
41
|
+
},
|
|
42
|
+
contactForm: {
|
|
43
|
+
enabled: true,
|
|
44
|
+
fields: {
|
|
45
|
+
name: true,
|
|
46
|
+
email: true,
|
|
47
|
+
phone: true,
|
|
48
|
+
service: false,
|
|
49
|
+
message: true,
|
|
50
|
+
},
|
|
51
|
+
successMessage: 'Thank you for your message! We\'ll get back to you soon.',
|
|
52
|
+
},
|
|
53
|
+
features: {
|
|
54
|
+
mobileCallBar: true,
|
|
55
|
+
openStatus: true,
|
|
56
|
+
mapEmbed: true,
|
|
57
|
+
socialLinks: true,
|
|
58
|
+
bookingButton: true,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
defaults: {
|
|
63
|
+
business: {
|
|
64
|
+
tagline: 'Fresh, Delicious, Made with Love',
|
|
65
|
+
description: 'Experience exceptional cuisine in a warm and welcoming atmosphere.',
|
|
66
|
+
priceRange: '$$',
|
|
67
|
+
},
|
|
68
|
+
menu: [
|
|
69
|
+
{ id: 'm1', name: 'House Salad', description: 'Fresh mixed greens with house vinaigrette', price: 9.99, category: 'Starters', sortOrder: 1 },
|
|
70
|
+
{ id: 'm2', name: 'Soup of the Day', description: 'Ask your server for today\'s selection', priceNote: 'Cup $5 / Bowl $8', category: 'Starters', sortOrder: 2 },
|
|
71
|
+
{ id: 'm3', name: 'Signature Pasta', description: 'House-made pasta with seasonal vegetables', price: 18.99, category: 'Entrees', sortOrder: 3 },
|
|
72
|
+
{ id: 'm4', name: 'Grilled Salmon', description: 'Fresh Atlantic salmon with lemon herb butter', price: 24.99, category: 'Entrees', sortOrder: 4 },
|
|
73
|
+
{ id: 'm5', name: 'Classic Burger', description: 'Half-pound beef patty with all the fixings', price: 15.99, category: 'Entrees', sortOrder: 5 },
|
|
74
|
+
{ id: 'm6', name: 'Chocolate Cake', description: 'Rich chocolate layer cake', price: 8.99, category: 'Desserts', sortOrder: 6 },
|
|
75
|
+
],
|
|
76
|
+
faq: [
|
|
77
|
+
{ id: 'f1', question: 'Do you take reservations?', answer: 'Yes! We recommend reservations for parties of 4 or more, especially on weekends. You can call us or book online.', sortOrder: 1 },
|
|
78
|
+
{ id: 'f2', question: 'Do you offer takeout or delivery?', answer: 'Yes, we offer both takeout and delivery. Order through our website or your favorite delivery app.', sortOrder: 2 },
|
|
79
|
+
{ id: 'f3', question: 'Can you accommodate dietary restrictions?', answer: 'Absolutely! We have vegetarian, vegan, and gluten-free options. Please inform your server of any allergies or dietary needs.', sortOrder: 3 },
|
|
80
|
+
{ id: 'f4', question: 'Do you have a private dining room?', answer: 'Yes, we have a private dining room that seats up to 20 guests. Contact us for reservations and special event menus.', sortOrder: 4 },
|
|
81
|
+
{ id: 'f5', question: 'Is there parking available?', answer: 'Yes, we have a parking lot behind the restaurant with free parking for guests.', sortOrder: 5 },
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
sheetTemplate: {
|
|
86
|
+
tabs: [
|
|
87
|
+
{
|
|
88
|
+
name: 'business',
|
|
89
|
+
required: true,
|
|
90
|
+
columns: [
|
|
91
|
+
{ name: 'key', description: 'Setting name', example: 'name', required: true },
|
|
92
|
+
{ name: 'value', description: 'Setting value', example: 'The Local Kitchen', required: true },
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'hours',
|
|
97
|
+
required: true,
|
|
98
|
+
columns: [
|
|
99
|
+
{ name: 'day', description: 'Day of week', example: 'Monday', required: true },
|
|
100
|
+
{ name: 'open', description: 'Opening time', example: '11:00 AM', required: false },
|
|
101
|
+
{ name: 'close', description: 'Closing time', example: '10:00 PM', required: false },
|
|
102
|
+
{ name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'menu',
|
|
107
|
+
required: true,
|
|
108
|
+
columns: [
|
|
109
|
+
{ name: 'name', description: 'Item name', example: 'Grilled Salmon', required: true },
|
|
110
|
+
{ name: 'description', description: 'Item description', example: 'Fresh Atlantic salmon with herbs', required: false },
|
|
111
|
+
{ name: 'price', description: 'Price (number)', example: '24.99', required: false },
|
|
112
|
+
{ name: 'price_note', description: 'Price note', example: 'Market price', required: false },
|
|
113
|
+
{ name: 'category', description: 'Menu section', example: 'Entrees', required: false },
|
|
114
|
+
{ name: 'dietary', description: 'Dietary tags (comma-separated)', example: 'gluten-free, dairy-free', required: false },
|
|
115
|
+
{ name: 'featured', description: 'Is featured?', example: 'TRUE', required: false },
|
|
116
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: 'gallery',
|
|
121
|
+
required: false,
|
|
122
|
+
columns: [
|
|
123
|
+
{ name: 'image_url', description: 'Image URL', example: 'https://drive.google.com/...', required: true },
|
|
124
|
+
{ name: 'alt', description: 'Image description', example: 'Signature pasta dish', required: false },
|
|
125
|
+
{ name: 'caption', description: 'Caption text', example: 'Our famous house-made pasta', required: false },
|
|
126
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: 'testimonials',
|
|
131
|
+
required: false,
|
|
132
|
+
columns: [
|
|
133
|
+
{ name: 'quote', description: 'Customer review', example: 'Best pasta in town!', required: true },
|
|
134
|
+
{ name: 'name', description: 'Customer name', example: 'John D.', required: true },
|
|
135
|
+
{ name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },
|
|
136
|
+
{ name: 'source', description: 'Review source', example: 'Yelp', required: false },
|
|
137
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: 'faq',
|
|
142
|
+
required: false,
|
|
143
|
+
columns: [
|
|
144
|
+
{ name: 'question', description: 'Question text', example: 'Do you take reservations?', required: true },
|
|
145
|
+
{ name: 'answer', description: 'Answer text', example: 'Yes, we recommend them for parties of 4+', required: true },
|
|
146
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
iconSuggestions: ['utensils', 'chef-hat', 'wine', 'coffee', 'pizza', 'salad', 'cake', 'soup'],
|
|
153
|
+
|
|
154
|
+
imageSuggestions: [
|
|
155
|
+
'Beautiful plated dish',
|
|
156
|
+
'Cozy restaurant interior',
|
|
157
|
+
'Chef preparing food',
|
|
158
|
+
'Happy diners at table',
|
|
159
|
+
'Bar or drink selection',
|
|
160
|
+
'Outdoor patio seating',
|
|
161
|
+
],
|
|
162
|
+
};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Salon / Beauty Business Preset
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { BusinessPreset } from '../types';
|
|
6
|
+
|
|
7
|
+
export const salonPreset: BusinessPreset = {
|
|
8
|
+
type: 'salon',
|
|
9
|
+
name: 'Hair Salon & Beauty',
|
|
10
|
+
description: 'Configuration for hair salons, beauty parlors, and styling businesses',
|
|
11
|
+
|
|
12
|
+
config: {
|
|
13
|
+
businessType: 'salon',
|
|
14
|
+
theme: {
|
|
15
|
+
preset: 'soft-pink',
|
|
16
|
+
borderRadius: 'lg',
|
|
17
|
+
shadows: 'md',
|
|
18
|
+
},
|
|
19
|
+
pages: {
|
|
20
|
+
home: {
|
|
21
|
+
enabled: true,
|
|
22
|
+
sections: [
|
|
23
|
+
'hero',
|
|
24
|
+
'services',
|
|
25
|
+
'team',
|
|
26
|
+
'gallery',
|
|
27
|
+
'testimonials',
|
|
28
|
+
'hours',
|
|
29
|
+
'location',
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
about: { enabled: true },
|
|
33
|
+
services: { enabled: true, title: 'Services & Pricing' },
|
|
34
|
+
team: { enabled: true, title: 'Our Stylists' },
|
|
35
|
+
gallery: { enabled: true, title: 'Our Work' },
|
|
36
|
+
contact: { enabled: true },
|
|
37
|
+
privacy: { enabled: true },
|
|
38
|
+
},
|
|
39
|
+
seo: {
|
|
40
|
+
titleTemplate: '%s | Hair Salon & Beauty',
|
|
41
|
+
keywords: ['hair salon', 'haircut', 'color', 'highlights', 'styling', 'beauty', 'blowout'],
|
|
42
|
+
jsonLdType: 'HealthAndBeautyBusiness',
|
|
43
|
+
},
|
|
44
|
+
contactForm: {
|
|
45
|
+
enabled: true,
|
|
46
|
+
fields: {
|
|
47
|
+
name: true,
|
|
48
|
+
email: true,
|
|
49
|
+
phone: true,
|
|
50
|
+
service: true,
|
|
51
|
+
message: true,
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
features: {
|
|
55
|
+
mobileCallBar: true,
|
|
56
|
+
openStatus: true,
|
|
57
|
+
mapEmbed: true,
|
|
58
|
+
socialLinks: true,
|
|
59
|
+
bookingButton: true,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
defaults: {
|
|
64
|
+
business: {
|
|
65
|
+
tagline: 'Where Style Meets Expertise',
|
|
66
|
+
description: 'Experience the art of hair styling with our talented team of professionals.',
|
|
67
|
+
priceRange: '$$',
|
|
68
|
+
},
|
|
69
|
+
services: [
|
|
70
|
+
{ id: 's1', title: 'Women\'s Haircut', description: 'Cut, shampoo, and style', priceNote: 'From $45', icon: 'scissors', sortOrder: 1 },
|
|
71
|
+
{ id: 's2', title: 'Men\'s Haircut', description: 'Precision cut and style', priceNote: 'From $30', icon: 'scissors', sortOrder: 2 },
|
|
72
|
+
{ id: 's3', title: 'Single Process Color', description: 'Full head single color application', priceNote: 'From $75', icon: 'palette', sortOrder: 3 },
|
|
73
|
+
{ id: 's4', title: 'Highlights', description: 'Partial or full highlights', priceNote: 'From $95', icon: 'sun', sortOrder: 4 },
|
|
74
|
+
{ id: 's5', title: 'Balayage', description: 'Hand-painted highlights for a natural look', priceNote: 'From $150', icon: 'paintbrush', sortOrder: 5 },
|
|
75
|
+
{ id: 's6', title: 'Blowout', description: 'Shampoo and professional blowout', priceNote: 'From $40', icon: 'wind', sortOrder: 6 },
|
|
76
|
+
{ id: 's7', title: 'Deep Conditioning', description: 'Intensive hair treatment', priceNote: 'From $25', icon: 'sparkles', sortOrder: 7 },
|
|
77
|
+
{ id: 's8', title: 'Special Occasion', description: 'Updos and formal styling', priceNote: 'From $65', icon: 'star', sortOrder: 8 },
|
|
78
|
+
],
|
|
79
|
+
team: [
|
|
80
|
+
{ id: 't1', name: 'Stylist Name', role: 'Senior Stylist', bio: 'With over 10 years of experience, specializing in color and cutting.', sortOrder: 1 },
|
|
81
|
+
{ id: 't2', name: 'Stylist Name', role: 'Color Specialist', bio: 'Expert in balayage, highlights, and creative color techniques.', sortOrder: 2 },
|
|
82
|
+
],
|
|
83
|
+
faq: [
|
|
84
|
+
{ id: 'f1', question: 'Do I need an appointment?', answer: 'Appointments are strongly recommended to ensure we can give you our full attention. Walk-ins are welcome based on availability.', sortOrder: 1 },
|
|
85
|
+
{ id: 'f2', question: 'What is your cancellation policy?', answer: 'We require 24-hour notice for cancellations or rescheduling. Late cancellations may incur a fee.', sortOrder: 2 },
|
|
86
|
+
{ id: 'f3', question: 'Do you offer consultations?', answer: 'Yes! We offer free consultations for color services and major transformations. This helps us understand your goals and create a plan.', sortOrder: 3 },
|
|
87
|
+
{ id: 'f4', question: 'What products do you use?', answer: 'We use professional-grade products from top brands. Ask your stylist about our current product lines.', sortOrder: 4 },
|
|
88
|
+
{ id: 'f5', question: 'How should I prepare for my appointment?', answer: 'Come with clean, dry hair unless otherwise instructed. Feel free to bring photos of styles you love!', sortOrder: 5 },
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
sheetTemplate: {
|
|
93
|
+
tabs: [
|
|
94
|
+
{
|
|
95
|
+
name: 'business',
|
|
96
|
+
required: true,
|
|
97
|
+
columns: [
|
|
98
|
+
{ name: 'key', description: 'Setting name', example: 'name', required: true },
|
|
99
|
+
{ name: 'value', description: 'Setting value', example: 'Luxe Hair Studio', required: true },
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'hours',
|
|
104
|
+
required: true,
|
|
105
|
+
columns: [
|
|
106
|
+
{ name: 'day', description: 'Day of week', example: 'Monday', required: true },
|
|
107
|
+
{ name: 'open', description: 'Opening time', example: '10:00 AM', required: false },
|
|
108
|
+
{ name: 'close', description: 'Closing time', example: '7:00 PM', required: false },
|
|
109
|
+
{ name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'services',
|
|
114
|
+
required: true,
|
|
115
|
+
columns: [
|
|
116
|
+
{ name: 'title', description: 'Service name', example: 'Women\'s Haircut', required: true },
|
|
117
|
+
{ name: 'description', description: 'Service description', example: 'Cut, shampoo, and style', required: false },
|
|
118
|
+
{ name: 'price_note', description: 'Pricing info', example: 'From $45', required: false },
|
|
119
|
+
{ name: 'duration', description: 'Service duration', example: '60 min', required: false },
|
|
120
|
+
{ name: 'icon', description: 'Icon name', example: 'scissors', required: false },
|
|
121
|
+
{ name: 'category', description: 'Service category', example: 'Cuts', required: false },
|
|
122
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'team',
|
|
127
|
+
required: false,
|
|
128
|
+
columns: [
|
|
129
|
+
{ name: 'name', description: 'Stylist name', example: 'Sarah Johnson', required: true },
|
|
130
|
+
{ name: 'role', description: 'Role/title', example: 'Senior Stylist', required: false },
|
|
131
|
+
{ name: 'bio', description: 'Short bio', example: 'Specializing in color for 10+ years', required: false },
|
|
132
|
+
{ name: 'image_url', description: 'Photo URL', example: 'https://drive.google.com/...', required: false },
|
|
133
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'gallery',
|
|
138
|
+
required: false,
|
|
139
|
+
columns: [
|
|
140
|
+
{ name: 'image_url', description: 'Image URL', example: 'https://drive.google.com/...', required: true },
|
|
141
|
+
{ name: 'alt', description: 'Image description', example: 'Balayage transformation', required: false },
|
|
142
|
+
{ name: 'caption', description: 'Caption text', example: 'Sun-kissed balayage', required: false },
|
|
143
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'testimonials',
|
|
148
|
+
required: false,
|
|
149
|
+
columns: [
|
|
150
|
+
{ name: 'quote', description: 'Customer review', example: 'Best haircut I\'ve ever had!', required: true },
|
|
151
|
+
{ name: 'name', description: 'Customer name', example: 'Amanda R.', required: true },
|
|
152
|
+
{ name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },
|
|
153
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'faq',
|
|
158
|
+
required: false,
|
|
159
|
+
columns: [
|
|
160
|
+
{ name: 'question', description: 'Question text', example: 'Do I need an appointment?', required: true },
|
|
161
|
+
{ name: 'answer', description: 'Answer text', example: 'Appointments are recommended...', required: true },
|
|
162
|
+
{ name: 'sort', description: 'Display order', example: '1', required: false },
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
iconSuggestions: ['scissors', 'palette', 'sparkles', 'sun', 'wind', 'star', 'heart', 'user'],
|
|
169
|
+
|
|
170
|
+
imageSuggestions: [
|
|
171
|
+
'Before and after hair transformation',
|
|
172
|
+
'Stylist working on client',
|
|
173
|
+
'Beautiful balayage result',
|
|
174
|
+
'Salon interior',
|
|
175
|
+
'Product display',
|
|
176
|
+
'Special occasion updo',
|
|
177
|
+
],
|
|
178
|
+
};
|