All files / src/lib/content/faqs national.ts

100% Statements 10/10
100% Branches 6/6
100% Functions 4/4
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101            1x             1x                                                                                                                       4x 2x                       9x 5x 5x 55x                      
import type { FAQItem } from "./general";
 
/**
 * Placeholder in an answer that `/faq` fills with the live city names at
 * render time (`withLiveCities`). Static content cannot know the live list.
 */
export const LIVE_CITIES_TOKEN = "{liveCities}";
 
/**
 * National FAQ for `/faq`. City prices and neighbourhood answers stay on
 * the city hub (Hyderabad keeps its own FAQ set). Nothing here names a city;
 * the live list arrives through `LIVE_CITIES_TOKEN`.
 */
export const NATIONAL_FAQS: FAQItem[] = [
	{
		question: "How does Interioring work?",
		answer:
			"Browse verified interior designers, compare their portfolios, and send a free inquiry to anyone who fits your home. The designer replies to arrange a conversation. You pay the designer directly. Interioring does not charge you to inquire.",
	},
	{
		question: "Are designers on Interioring verified?",
		answer:
			"Yes. Every designer is reviewed before their profile is published: portfolio, business details, and identity. Profiles that do not meet that bar stay unpublished.",
	},
	{
		question: "Which cities have designer pages?",
		answer:
			"A city page is published when that city has a published designer, or when we have pinned it live. {liveCities} If your city is not listed yet, you can still send a request and we store it with the city you chose.",
	},
	{
		question: "Can I request a designer in a city that is not listed yet?",
		answer:
			"Yes. Choose your city on the get-matched form, or type it under Other city. We accept the request and store the city you named, the same as any other inquiry.",
	},
	{
		question: "How do I contact a designer?",
		answer:
			"Open their profile and send an inquiry, or use Chat on WhatsApp to message Interioring. The designer’s team replies to you directly.",
	},
	{
		question: "Do I pay Interioring or the designer?",
		answer:
			"You pay the designer. The contract and the payment schedule are between you and the studio. Interioring does not take a fee on the job.",
	},
	{
		question: "Where do interior cost figures come from?",
		answer:
			"We publish rupee ranges only for a city after the numbers are approved. The cost calculator offers those cities and labels the result as an estimate based on that city’s rates. It is not an India average.",
	},
	{
		question: "Do designers follow vastu?",
		answer:
			"Many designers can plan a home with vastu preferences: kitchen and entrance placement, room positions, and colours. Say so in your request. Vastu is a design preference, not a separate city service, and not every studio specialises in it.",
	},
	{
		question: "How long does a home interior project take?",
		answer:
			"A modular kitchen is often a few weeks after the design is signed. A full home is longer and depends on the size of the flat, the finish, and how much civil work is included. Your designer confirms the timeline in the quote.",
	},
	{
		question: "Is a site visit free?",
		answer:
			"Many designers offer a first visit at no charge so they can measure the home and hear the brief. Ask when you send your inquiry. A visit is not a promise to hire.",
	},
	{
		question: "Can I see past work before I hire?",
		answer:
			"Yes. Each published profile shows completed projects photographed on site. Use those photos, not stock images, to judge the work.",
	},
];
 
/** "A", "A and B", "A, B and C". */
function joinNames(names: string[]): string {
	if (names.length <= 1) return names.join("");
	return `${names.slice(0, -1).join(", ")} and ${names[names.length - 1]}`;
}
 
/**
 * Fills `LIVE_CITIES_TOKEN` with the live city names, so the visible answer
 * and the FAQPage JSON-LD (both built from the result) say the same thing.
 * With no names (API down and no fallback) the sentence is dropped.
 */
export function withLiveCities(
	faqs: FAQItem[],
	cityNames: string[],
): FAQItem[] {
	const names = cityNames.map((n) => n.trim()).filter(Boolean);
	const sentence = names.length ? `Live today: ${joinNames(names)}.` : "";
	return faqs.map((faq) =>
		faq.answer.includes(LIVE_CITIES_TOKEN)
			? {
					...faq,
					answer: faq.answer
						.replaceAll(LIVE_CITIES_TOKEN, sentence)
						.replace(/\s{2,}/g, " ")
						.trim(),
				}
			: faq,
	);
}