Development
Database - Done
55 min
overview this outlines a proposed database structure for the 360pulse application the schema described below is derived from the ui design and features (including pulse score calculation, multi language support, plan tiers) it aims to provide a comprehensive foundation for storing the data needed to support the functionality considerations outline nature please consider this schema an initial outline based on the information available as development progresses, details may need refinement, optimization based on query patterns, or adjustments based on specific framework choices or performance testing framework (users, roles, billing) this document includes tables for core concepts like users , roles , workspacemembers , plans , and workspacesubscriptions our framework already provides some or all of that functionality i included the tables here to illustrate how inter table relationships would work, and help explain how the overall application should function these should be viewed as a guidelines representing the types of data and relationships required by the application's features (e g , linking users to workspaces, defining plan features, gating access) data types & constraints specific data types (varchar lengths, enum values, etc ) and constraints (indexes, precise foreign key relationships) provided are illustrative and should be finalized during detailed design and implementation according to the chosen database system and best practices database tables workspaces purpose represents a top level customer account, typically a company or organization using 360pulse it acts as a container for users, pulsechecks, contacts, and billing information usage used to isolate data between different customers all major entities like pulsechecks, contacts, tags, etc , are linked back to a workspace id example row workspace id ws abc123 workspace name example corp owner user id user xyz789 created at 2025 01 15 10 00 00 updated at 2025 03 20 11 30 00 table structure column name data type notes workspace id int / uuid pk workspace name varchar owner user id int / uuid fk to users (optional v1) created at timestamp updated at timestamp users purpose stores login credentials and basic profile information for individuals who can access the 360pulse application usage used for authenticating users into the admin interface linked to workspaces via workspacemembers example row user id user xyz789 email admin\@example com password hash \[hashed password string] first name admin last name user is active true last login at 2025 04 07 09 30 00 created at 2025 01 15 09 55 00 updated at 2025 04 07 09 30 0 table structure column name data type notes user id int / uuid pk email varchar unique password hash varchar first name varchar nullable last name varchar nullable is active boolean default true last login at timestamp nullable created at timestamp updated at timestamp roles 3\ roles purpose defines the different permission levels available within the system (for v1, this might only contain a single 'admin' role) usage assigned to users within a specific workspace via the workspacemembers table to control access in future versions example row role id 1 role name admin description full access to all workspace features table structure column name data type notes role id int / serial pk role name varchar unique, e g , 'admin' description text nullable workspacemembers purpose links users from the users table to specific workspaces and assigns them a role this defines who can access which workspace and their permission level within it usage checked upon login and during actions to verify user access to a workspace and potentially features (based on role in future) example row member id wsm pqr456 workspace id ws abc123 user id user xyz789 role id 1 (admin) joined at 2025 01 15 10 05 00 table structure column name data type notes member id int / uuid pk workspace id int / uuid fk to workspaces user id int / uuid fk to users role id int fk to roles joined at timestamp constraint unique(workspace id, user id) plans purpose defines the available subscription tiers (free, standard, pro) and their associated features, limits, and pricing usage referenced by workspacesubscriptions and pulsechecks to determine feature availability (like multi language, white labeling) and enforce limits (contact counts) example row (pro plan) plan id 3 plan name pro contact limit 500 (base limit) allows overages true overage bundle size 100 overage bundle cost 10 00 multi language enabled true allow white label true base price monthly 99 00 base price annually 999 00 table structure column name data type notes plan id int / serial pk plan name varchar e g , 'free', 'standard', 'pro' contact limit int nullable (for base pro limit) allows overages boolean overage bundle size int nullable overage bundle cost decimal nullable multi language enabled boolean allow white label boolean base price monthly decimal base price annually decimal workspacesubscriptions purpose tracks which plan a specific workspace is currently subscribed to, including the billing cycle and status usage determines the active plan for a workspace, used for feature gating, limit checking, and triggering billing events tracks purchased overage bundles for the current period example row subscription id sub def456 workspace id ws abc123 plan id 3 (pro) status active billing cycle monthly current period end 2025 05 15 purchased overage bundles 1 started at 2025 01 15 10 10 00 cancelled at null table structure column name data type notes subscription id int / uuid pk workspace id int / uuid fk to workspaces plan id int fk to plans status enum / varchar e g , 'active', 'cancelled' billing cycle enum / varchar e g , 'monthly', 'annually' current period end date purchased overage bundles int default 0 started at timestamp cancelled at timestamp nullable pulsechecks purpose defines a specific survey configuration, including its name, associated questions, schedule, email templates, branding, thank you page logic, and other settings belongs to a workspace usage the central definition for a survey campaign referenced when scheduling sends, rendering surveys, applying settings, and displaying dashboards the active plan features/limits apply here example row pulsecheck id pc jkl789 workspace id ws abc123 name client happiness introduction text welcome! please share your feedback reference group customers company category primary brand vertical market saas nps question wording on a scale of 0 10, how likely are you to recommend example corp? frequency monthly schedule start date 2025 02 01 schedule details {"type" "relative", "occurrence" "first", "day type" "monday"} use comment sentiment true collect testimonials true require testimonial opt in true typage settings {"high heading" "thanks!", "high message" "we appreciate it ", } branding settings {"logo url" "/logos/example png", "color accent" "#007bff", } remove branding true (assuming pro plan) is active true created at 2025 01 20 14 00 00 updated at 2025 04 04 17 10 00 table structure column name data type notes pulsecheck id int / uuid pk workspace id int / uuid fk to workspaces name varchar introduction text text nullable reference group varchar nullable company category varchar nullable vertical market varchar nullable nps question wording text frequency enum / varchar schedule start date date nullable schedule details json / varchar stores relative/specific rules use comment sentiment boolean default true collect testimonials boolean default true require testimonial opt in boolean default true typage settings json nullable, stores ty page content branding settings json nullable, stores design elements remove branding boolean default false is active boolean default true created at timestamp updated at timestamp questions purpose stores the definition of individual questions used within pulsechecks, including the default text, type (smileyscale or nps), sorting order, and area/category usage linked to a pulsecheck displayed to users during survey completion translations are stored separately example row question id q 101 pulsecheck id pc jkl789 question text default how satisfied are you with our support responsiveness? area support question type smileyscale sort order 1 is active true created at 2025 01 20 14 05 00 updated at 2025 01 20 14 05 00 table structure column name data type notes question id int / serial pk pulsecheck id int / uuid fk to pulsechecks question text default text source language text area varchar short name / category question type enum / varchar 'smileyscale', 'nps' sort order int is active boolean default true created at timestamp updated at timestamp questiontranslations purpose stores the translated text for questions and their areas/short names in various languages usage looked up when rendering a survey for a user whose browser language (and the pulsecheck's plan) supports multi language if no translation exists for the target language, the default from the questions table is used example row translation id qt 201 question id q 101 language code es translated text ¿qué tan satisfecho está con la capacidad de respuesta de nuestro soporte? translated area soporte last updated at 2025 01 21 10 00 00 table structure column name data type notes translation id int / serial pk question id int fk to questions language code varchar(5) e g , 'en', 'es' translated text text translated area varchar translated short name last updated at timestamp constraint unique(question id, language code) emailtemplates purpose defines a specific email template instance (initial, reminder1, or reminder2) associated with a particular pulsecheck it primarily serves as a linking record to find the relevant default system text (from systemtextsnippets ) and any user provided customizations/overrides (from emailtemplatecontent ) usage created automatically (three records per pulsecheck initial, reminder1, reminder2) when a new pulsecheck is defined it's used during email sending to identify the correct set of content to assemble the source language code field tracks the language the user last edited the template in, which is used as the source for triggering auto translations the last updated at field reflects when any customization related to this template was last saved user editable fields like from name (if applicable) are stored here schema example row template id et 301 pulsecheck id pc jkl789 email type initial from name example corp support (user customized this) source language code en last updated at 2025 04 07 10 40 00 logic this section details the logic for managing email templates, storing system defaults centrally and user customizations separately within the database storage strategy system defaults all default text snippets (for both customizable fields like 'subject' and fixed fields like 'take the survey' button label) are stored centrally in the systemtextsnippets table, keyed by a unique text key and language code this table is seeded during setup and serves as the master source for default content template definition the emailtemplates table defines a template instance for a specific pulsecheck id and email type it stores minimal configuration like the customizable from name and tracks the source language code of the last user edit user customizations specific overrides provided by users for editable fields (subject, preview, body before/after) are stored separately in the emailtemplatecontent table each record links to an emailtemplates instance ( template id ) and language code a record only exists here if the user has customized at least one editable field for that specific template/language combination user customization & auto translation workflow editing user modifies content (e g , subject in 'en') saving an emailtemplatecontent record for the template id and language code ('en') is created or updated, storing only the modified field values emailtemplates last updated at and emailtemplates source language code are updated triggering auto translation (pro plan) if applicable, translates only the modified fields from the source language into other supported languages saving translations creates/updates emailtemplatecontent records for other languages, populating only the corresponding auto translated fields emailtemplatecontent last edited at is updated "revert to default" action when invoked for a template ( template id ), all associated records in emailtemplatecontent for that template id (across all languages) are deleted this causes the sending logic to fully rely on systemtextsnippets for this template email sending logic determine the target language code find the relevant template id fetch customizations (attempt) try to fetch the emailtemplatecontent record matching template id and language code store any non null values found (these are the overrides) fetch all relevant defaults fetch the necessary default text snippets from systemtextsnippets for the target language code using predefined text key s (e g , keys for default subject, default body1, button label, infobox titles, etc ) assemble content for each piece of content needed in the email customizable fields (subject, preview, body1, body2) use the value from the fetched emailtemplatecontent record if it exists and the specific field is not null ; otherwise, use the corresponding default value fetched from systemtextsnippets fixed structural fields ("take the survey", etc ) use the value fetched directly from systemtextsnippets using its specific text key from name use emailtemplates from name if not null, otherwise fetch the default 'from name' from systemtextsnippets using its key perform variable substitutions on the assembled customizable parts (primarily subject and body fields) construct and send the final email table structure column name data type notes template id int / serial pk pulsecheck id int / uuid fk to pulsechecks email type enum / varchar 'initial', 'reminder1', 'reminder2' from name varchar nullable source language code varchar(5) default 'en' last updated at timestamp constraint unique(pulsecheck id, email type) emailtemplatecontent purpose stores user defined customizations (overrides) for the editable fields of an email template (subject, preview text, body before/after button) for a specific language it also stores the auto translated versions of these user customizations for other languages on pro plans system default text is stored separately in systemtextsnippets usage this table is queried during email sending to check if a user has provided custom text for the recipient's language preference for a specific template if a record exists for the template id and language code , the non null values from this record are used instead of the system defaults (retrieved from systemtextsnippets ) a record only exists here if a user has customized at least one editable field for the specific template id and language code combination auto translation processes also create/update records here the "revert to default" action deletes records from this table for the relevant template id schema example row (user customized subject and body 1 in english) content id etc 401 template id et 301 language code en subject a custom subject line! preview text null (user didn't customize this part) body before button here is my custom intro text body after button null (user didn't customize this part) last edited at 2025 04 07 10 40 00 example row (auto translation of the above into spanish) content id etc 402 template id et 301 language code es subject ¡una línea de asunto personalizada! preview text null body before button aquí está mi texto de introducción personalizado body after button null last edited at 2025 04 07 10 41 00 (timestamp of auto translation) table structure column name data type notes content id int / serial pk template id int fk to emailtemplates language code varchar(5) subject varchar preview text varchar nullable body before button text body after button text is custom boolean true if user edited this lang directly last translated at timestamp nullable, tracks auto translation time constraint unique(template id, language code) contacts purpose stores information about the individuals (audience) who can receive pulsecheck surveys belongs to a workspace usage central repository for audience data used for sending surveys, assigning tags, tracking status (active, unsubscribed, bounced), and displaying contact lists/details email uniqueness within a workspace is important example row contact id con mno567 workspace id ws abc123 first name jane last name doe email jane doe\@email com job title customer success manager avatar url /avatars/jane jpg status active is bounced false language preference en created at 2025 02 10 11 00 00 updated at 2025 03 15 12 00 00 table structure column name data type notes contact id int / uuid pk workspace id int / uuid fk to workspaces first name varchar last name varchar nullable email varchar job title varchar nullable avatar url varchar nullable status enum / varchar 'active', 'unsubscribed', 'bounced' is bounced boolean default false language preference varchar(5) nullable, for emails created at timestamp updated at timestamp constraint unique(workspace id, email) tags purpose defines reusable labels (tags) that can be applied to contacts for segmentation and filtering specifies the tag name, format (text or dropdown), and potential dropdown options belongs to a workspace usage used in the audience section to manage tag definitions referenced when assigning tags to contacts and when filtering contact lists or dashboard data is filterable controls visibility in filter modals example row (dropdown tag) tag id tag 51 workspace id ws abc123 tag name region description geographic sales territory tag type dropdown dropdown options \["north", "south", "east", "west"] is filterable true created at 2025 01 25 10 00 00 updated at 2025 01 25 10 00 00 table structure column name data type notes tag id int / serial pk workspace id int / uuid fk to workspaces tag name varchar description text nullable tag type enum / varchar 'text', 'dropdown' dropdown options json / text nullable is filterable boolean default false created at timestamp updated at timestamp constraint unique(workspace id, tag name) contacttags purpose creates the many to many relationship between contacts and tags, storing the specific value assigned for a tag to a contact usage queried when displaying tags on a contact's profile and crucially when filtering lists/dashboards based on tag values example row contact tag id ct 601 contact id con mno567 tag id tag 51 (region) tag value west assigned at 2025 02 10 11 05 00 table structure column name data type notes contact tag id int / serial pk contact id int / uuid fk to contacts tag id int fk to tags tag value varchar text or selected dropdown value assigned at timestamp constraint unique(contact id, tag id) contactpulsechecksubscriptions purpose tracks which contacts are subscribed to receive which specific pulsechecks manages the opt in/out status per pulsecheck usage determines the recipient list when a pulsecheck instance is scheduled to be sent used to check plan contact limits example row subscription id cps 701 contact id con mno567 pulsecheck id pc jkl789 is subscribed true subscribed at 2025 02 10 11 10 00 unsubscribed at null table structure column name data type notes subscription id int / serial pk contact id int / uuid fk to contacts pulsecheck id int / uuid fk to pulsechecks is subscribed boolean default true subscribed at timestamp unsubscribed at timestamp nullable constraint unique(contact id, pulsecheck id) pulsecheckinstances purpose represents a specific instance of a pulsecheck being sent to a contact for a given period (e g , the april 2025 instance of the "client happiness" survey for jane doe) tracks the sending status and links to the responses usage created when a scheduled pulsecheck runs status is updated based on email tracking and survey completion holds the calculated pulse score for this specific interaction central record for tracking individual survey progress example row (completed) instance id pci 801 contact id con mno567 pulsecheck id pc jkl789 period name april 2025 sent date 2025 04 07 10 00 00 completed date 2025 04 07 15 30 00 status completed calculated pulse score 85 expires at 2025 04 21 10 00 0 table structure column name data type notes instance id int / uuid pk contact id int / uuid fk to contacts pulsecheck id int / uuid fk to pulsechecks period name varchar e g , 'april 2025' sent date timestamp completed date timestamp nullable status enum / varchar 'sent', 'opened', 'bounced' calculated pulse score int / decimal nullable, 0 100 score for instance expires at timestamp nullable responses purpose stores the individual answers provided by a contact for each question within a specific pulsecheck instance holds the raw response, derived nps status, comment text, and comment sentiment/score usage primary source for calculating pulse scores, nps scores, sentiment analysis, and displaying detailed results linked to a pulsecheckinstance example row (smiley + comment) response id resp 901 instance id pci 801 question id q 101 (support question) response value happy nps status null comment text support was very quick this time! comment sentiment positive comment sentiment score 92 50 is comment read false response language code en responded at 2025 04 07 15 29 00 example row (nps) response id resp 902 instance id pci 801 question id q 102 (nps question id) response value 9 nps status promoter comment text null comment sentiment null comment sentiment score null is comment read false response language code en responded at 2025 04 07 15 29 30 table structure column name data type notes response id int / serial pk instance id int / uuid fk to pulsecheckinstances question id int fk to questions response value varchar nps score, smiley value, etc nps status enum / varchar 'promoter', 'passive', 'detractor', nullable comment text text nullable comment sentiment enum / varchar 'positive', 'negative', 'neutral', nullable comment sentiment score decimal(5,2) nullable, 0 100 score is comment read boolean default false response language code varchar(5) language survey was taken in responded at timestamp emailtracking purpose provides more granular tracking of email interactions (opens, clicks) beyond the basic status in pulsecheckinstances might be useful for detailed delivery analysis but adds overhead usage populated via webhooks or tracking pixels from the email sending service used for reporting on email engagement rates example row tracking id etk 1001 instance id pci 801 email type initial opened at 2025 04 07 11 15 00 clicked at 2025 04 07 15 25 00 table structure column name data type notes tracking id int / serial pk instance id int / uuid fk to pulsecheckinstances email type enum / varchar 'initial', 'reminder1', 'reminder2' opened at timestamp nullable clicked at timestamp nullable bounces purpose logs email bounce events reported by the email sending service helps identify invalid email addresses or temporary delivery issues usage populated by callbacks/webhooks from the email service used to update contacts status and contacts is bounced flags provides data for admins to manage list hygiene example row (hard bounce) bounce id b 1101 contact id con pqr890 instance id pci 805 email address bad email\@invalid com bounce type hard reason 550 user unknown bounced at 2025 04 07 10 00 05 table structure column name data type notes bounce id int / serial pk contact id int / uuid fk to contacts instance id int / uuid fk to pulsecheckinstances, nullable email address varchar email at time of bounce bounce type enum / varchar 'hard', 'soft' reason text nullable, from email service bounced at timestamp generalfeedback purpose stores feedback submitted via the post survey thank you page, not tied to a specific survey question usage captures additional context or general comments after the main survey analyzed for sentiment displayed on the contact's feedback tab example row general feedback id gf 1201 instance id pci 801 contact id con mno567 feedback text overall a good experience this month sentiment positive sentiment score 75 00 is read false submitted at 2025 04 07 15 31 00 table structure column name data type notes general feedback id int / serial pk instance id int / uuid fk to pulsecheckinstances contact id int / uuid fk to contacts feedback text text sentiment enum / varchar nullable sentiment score decimal(5,2) nullable is read boolean default false submitted at timestamp testimonials purpose stores feedback explicitly approved (if opt in required) or designated as a testimonial, usually gathered from highly satisfied respondents via the thank you page usage displayed in the testimonials tab for a contact and potentially aggregated in a workspace level testimonials view is approved for marketing flag can control external use example row testimonial id test 1301 contact id con mno567 instance id pci 801 pulsecheck id pc jkl789 testimonial text example corp's support is fantastic! opt in granted true opt in text i allow use of this testiminial (this will be the full message from the page) is approved for marketing false (requires review) created at 2025 04 07 15 32 00 is read false read at null table structure column name data type notes testimonial id int / serial pk contact id int / uuid fk to contacts instance id int / uuid fk to pulsecheckinstances pulsecheck id int / uuid fk to pulsechecks testimonial text text opt in granted boolean opt in text text is approved for marketing boolean default false created at timestamp is read boolean default false read at timestamp nullable reviewplatforms purpose stores the configuration for external review site links (like google, g2, yelp) defined at the workspace level usage populates the options presented on the "review tab" of the high satisfaction thank you page is enabled controls visibility stores specific identifiers like google place id where needed example row (google) platform id rp 1401 workspace id ws abc123 platform name google platform logo url /logos/google svg platform url https //search google com/local/writereview?placeid=chexampleplaceid google place id chexampleplaceid is enabled true created at 2025 02 01 10 00 00 updated at 2025 02 01 10 00 00 table structure column name data type notes platform id int / serial pk workspace id int / uuid fk to workspaces platform name varchar e g , 'google', 'g2' platform logo url varchar nullable platform url varchar url for reviews google place id varchar nullable, specific to google is enabled boolean default true created at timestamp updated at timestamp advocacyactions purpose tracks specific advocacy related actions taken by contacts, primarily clicking on external review links from the thank you page usage populates the "review link clicks" metric on dashboards provides data on which platforms users are engaging with example row action id aa 1501 contact id con mno567 instance id pci 801 action type reviewlinkclick platform id rp 1401 (google) action timestamp 2025 04 07 15 33 00 table structure column name data type notes action id int / serial pk contact id int / uuid fk to contacts instance id int / uuid fk to pulsecheckinstances action type enum / varchar 'reviewlinkclick' platform id int fk to reviewplatforms, nullable action timestamp timestamp monthlycontactmetrics purpose stores pre calculated, aggregated metrics per contact per month designed to speed up dashboard loading for contacts and potentially overall reporting usage populated by an automated routine (e g , nightly or triggered on instance completion) provides data for the contact overview dashboard tiles (pulse score, nps) and potentially trend charts example row metric id mcm 1601 contact id con mno567 month 4 year 2025 average pulse score 85 average nps score 9 (avg 0 10 scale score) nps status promoter last updated 2025 04 07 16 00 00 table structure column name data type notes metric id int / serial pk contact id int / uuid fk to contacts month int 1 12 year int average pulse score int / decimal nullable, aggregated score 0 100 average nps score int / decimal nullable, aggregated 0 10 score nps status enum / varchar nullable, latest p/p/d status last updated timestamp constraint unique(contact id, month, year) systemtextsnippets purpose acts as the central repository for all system default text snippets used within the application, primarily for email templates but potentially usable elsewhere it stores the default versions for fields users can customize (like subject, body) as well as the fixed text for elements users cannot customize (like the "take the survey" button label or standard informational text) this ensures defaults are stored only once and are managed centrally usage this table is populated (seeded) during application deployment or database migration with all required default text snippets for all supported languages during email assembly, the system queries this table using predefined text key s and the target language code to retrieve the necessary default text these defaults are used as fallbacks if a user hasn't provided a specific customization in emailtemplatecontent for the editable fields, and are used directly for the fixed structural elements of the email this table is read only from the perspective of a regular user interacting with pulsecheck settings updates would typically happen via migrations or a dedicated super admin interface schema example row (default subject) snippet id 1 text key email initial subject language code en text value your feedback is important! example row (default subject spanish) snippet id 2 text key email initial subject language code es text value ¡su opinión es importante! example row (button label) snippet id 53 text key email template button takesurvey language code en text value take the survey example row (button label spanish) snippet id 54 text key email template button takesurvey language code es text value realizar la encuesta table structure column name data type notes snippet id int / serial pk text key varchar unique key, e g , 'email initial subject', 'email template button takesurvey' language code varchar(5) e g , 'en', 'es' text value text the actual translated default text constraint unique(text key, language code) prompt to generate systemtextsnippets for each language i did not generate the systemtextsnippets translations yet because i did not know what syntax you want to use for placeholders (variables) i create the prompt needed to generate the data for each language as a csv i used square brackets in this example, but you can update to your desired syntax you will need to run this prompt separately for each language (or give me the desired syntax and i can run it) the quality of these translations needs to be very good i would recommend we use claude 3 7 or gemini 2 5 prompt for llm please act as a professional translator translate the following english text snippets into target language name (target language code) instructions 1\ translate only the english text provided after the colon for each `text key` 2\ crucially, preserve any placeholders exactly as they appear (e g , `\[contactfirstname]`, `\[your company name]`, `\[frequency]`) do not translate the text inside the square brackets 3\ for the `email template footer unsubscribe` key, translate the surrounding text but keep the link part structured as `\[unsubscribe link start]translated text for unsubscribe here\[unsubscribe link end]` 4\ maintain the general tone and meaning of the original english text 5\ output the results strictly in csv format with three columns `text key`, `language code`, `text value` 6\ the `language code` column should always contain target language code 7\ include a header row in the csv output 8\ ensure the `text value` in the csv is properly quoted if it contains commas or newlines (standard csv practice) use newline characters (`\n`) within the quoted `text value` where appropriate based on the source text structure english source text snippets email initial fromname default \[your company name] email initial subject default your feedback for \[your company name]! email initial preview\ default tell us about your recent experience email initial bodybeforebutton default hello \[contactfirstname],\n\nthank you for choosing \[your company name] we strive to provide exceptional experiences and value your feedback \nwould you take a moment to let us know how we're doing? your input is valuable and will help us improve email initial bodyafterbutton default your feedback helps us improve and better meet your needs \nthank you for your time and continued support \n\nbest regards,\nthe \[your company name] team email reminder1 fromname default \[your company name] email reminder1 subject default reminder your feedback for \[your company name]! email reminder1 preview\ default just a quick reminder to share your thoughts email reminder1 bodybeforebutton default hello \[contactfirstname],\n\nthis is a friendly reminder about our satisfaction pulse check we sent earlier this month \nyour ongoing feedback is invaluable to us as we strive to improve your experience with our organization this brief survey only takes a minute or two to complete email reminder1 bodyafterbutton default thank you for being a valued part of our community \n\nbest regards,\nthe \[your company name] team email reminder2 fromname default \[your company name] email reminder2 subject default final reminder your feedback for \[your company name]? email reminder2 preview\ default last chance to tell us about your experience email reminder2 bodybeforebutton default hello \[contactfirstname],\n\nour \[frequency] pulsecheck survey will be closing soon, and we haven't heard from you yet \nyour perspective is important to us and helps ensure we're meeting your needs consistently this brief check in takes just 1 2 minutes to complete email reminder2 bodyafterbutton default thank you for your continued support and for helping us improve \n\nbest regards,\nthe \[your company name] team email template opinionmatters your opinion matters email template completeinminutes complete in 1 2 minutes email template button takesurvey take the survey email template infobox quick title quick & easy email template infobox quick subtitle brief survey email template infobox improve title help us improve email template infobox improve subtitle we value your input email template infobox comments title share comments email template infobox comments subtitle tell us your thoughts email template footer signature best regards, email template footer sendername the \[your company name] team email template footer poweredby powered by email template footer unsubscribe if you’d rather not receive future surveys, you can \[unsubscribe link start]unsubscribe here\[unsubscribe link end] example for target language name = spanish, target language code = es output the csv like this ```csv text key,language code,text value email initial fromname default,es,"\[your company name]" email initial subject default,es,"¡su opinión para \[your company name]!" email initial preview\ default,es,"cuéntenos sobre su experiencia reciente " email initial bodybeforebutton default,es,"hola \[contactfirstname],\n\ngracias por elegir \[your company name] nos esforzamos por brindar experiencias excepcionales y valoramos sus comentarios \n¿podría tomarse un momento para decirnos cómo lo estamos haciendo? su opinión es valiosa y nos ayudará a mejorar " email initial bodyafterbutton default,es,"sus comentarios nos ayudan a mejorar y satisfacer mejor sus necesidades \ngracias por su tiempo y apoyo continuo \n\nsaludos cordiales,\nel equipo de \[your company name]" email reminder1 fromname default,es,"\[your company name]" email reminder1 subject default,es,"recordatorio ¡su opinión para \[your company name]!" email reminder1 preview\ default,es,"solo un breve recordatorio para compartir sus pensamientos " email reminder1 bodybeforebutton default,es,"hola \[contactfirstname],\n\neste es un recordatorio amistoso sobre nuestra encuesta rápida de satisfacción que enviamos a principios de este mes \nsus comentarios continuos son invaluables para nosotros mientras nos esforzamos por mejorar su experiencia con nuestra organización esta breve encuesta solo toma uno o dos minutos para completar " email reminder1 bodyafterbutton default,es,"gracias por ser una parte valiosa de nuestra comunidad \n\nsaludos cordiales,\nel equipo de \[your company name]" email reminder2 fromname default,es,"\[your company name]" email reminder2 subject default,es,"último recordatorio ¿su opinión para \[your company name]?" email reminder2 preview\ default,es,"última oportunidad para contarnos sobre su experiencia " email reminder2 bodybeforebutton default,es,"hola \[contactfirstname],\n\nnuestra encuesta \[frequency] pulsecheck se cerrará pronto y aún no hemos tenido noticias suyas \nsu perspectiva es importante para nosotros y nos ayuda a garantizar que satisfacemos sus necesidades de manera constante este breve registro toma solo 1 2 minutos para completar " email reminder2 bodyafterbutton default,es,"gracias por su continuo apoyo y por ayudarnos a mejorar \n\nsaludos cordiales,\nel equipo de \[your company name]" email template opinionmatters,es,"su opinión importa" email template completeinminutes,es,"complete en 1 2 minutos" email template button takesurvey,es,"realizar la encuesta" email template infobox quick title,es,"rápido y fácil" email template infobox quick subtitle,es,"encuesta breve" email template infobox improve title,es,"ayúdanos a mejorar" email template infobox improve subtitle,es,"valoramos su opinión" email template infobox comments title,es,"compartir comentarios" email template infobox comments subtitle,es,"cuéntanos lo que piensas" email template footer signature,es,"saludos cordiales," email template footer sendername,es,"el equipo de \[your company name]" email template footer poweredby,es,"desarrollado por " email template footer unsubscribe,es,"si prefiere no recibir encuestas futuras, puede \[unsubscribe link start]cancelar la suscripción aquí\[unsubscribe link end] "