A construction company's website is not just a business card. A general contractor works with two different audiences: a private client looking for a renovation contractor, and a corporate client submitting tender documentation for a project. Both scenarios require different presentation, different feedback forms, and different levels of detail. We have already launched more than 15 such projects — each with a unique architecture adapted for a dual funnel. Our experience shows that Bitrix allows solving both tasks within a single site, but the data structure must be laid out taking this duality into account.
Our turnkey construction company website development on 1C-Bitrix costs from $5,000 and is completed within 4-6 weeks for a basic package. We'll evaluate your project for free — write to us for a consultation.
How to filter the portfolio by client type?
A private client doesn't want to see industrial workshops, and a tender manager doesn't want to see bathroom renovations. The CLIENT_TYPE property in the project card solves this: on the service page, only relevant works are displayed. In the PORTFOLIO infoblock, each project is assigned a type (B2B, B2C, or both). On the frontend, bitrix:catalog.smart_filter with a switch "For Home / For Business" hides irrelevant positions. On the portfolio map, markers are clustered via ymaps.Clusterer — clicking reveals an "after" photo, area, and a link to details.
| Approach | Typical site | Our solution |
|---|---|---|
| Filter by client | None: all projects in one feed | CLIENT_TYPE property, switch on catalog page |
| Conversion to request | ~1.2% | ~3.8% (3.2x higher) |
| Time to find relevant project | 2–3 minutes | 15–20 seconds |
Our clients save up to 30% of their budget due to automatic filtering of irrelevant requests. Our multi-step calculator is 2.5 times more effective than a simple calculator.
Why is a multi-step calculator more effective than a simple one?
A simple calculator outputs a single number — the client doesn't trust it because they don't understand the components. A multi-step calculator breaks down the cost into components: base rate, surcharge for number of floors, foundation type. According to our data, this approach increases conversion to request 2.5 times compared to a single-page calculator. Trust grows when the client sees a transparent breakdown and can adjust parameters.
How we build the calculator: deep dive
The calculator is the highest conversion element. Four steps:
- Type of work — new construction, renovation, reconstruction, finishing.
- Object parameters — area (slider + manual input), number of floors, foundation (for new construction), current condition (for renovation).
- Materials — ready-made sets (economy, standard, premium) or manual selection by category.
- Result — cost range, timeframe, button "Get an accurate estimate".
Highload block CALC_RATES with fields: UF_WORK_TYPE, UF_MATERIAL_CLASS, UF_BASE_RATE, UF_FLOOR_COEFF, UF_FOUNDATION_COEFF, UF_REGION_COEFF. The manager updates rates without a developer — a new record is automatically picked up by the calculator.
Server-side. Custom controller CalcEstimateController with AJAX method calculateAction. Full listing:
namespace Project\Component;
use Bitrix\Main\Engine\Controller;
use Bitrix\Main\Engine\ActionFilter;
class CalcEstimateController extends Controller
{
public function configureActions(): array
{
return [
'calculate' => [
'prefilters' => [
new ActionFilter\HttpMethod([ActionFilter\HttpMethod::METHOD_POST]),
new ActionFilter\Csrf(),
],
],
];
}
public function calculateAction(
string $workType,
float $area,
int $floors,
string $materialClass,
string $foundation = ''
): array {
$rates = HighloadManager::getRow('CALC_RATES', [
'UF_WORK_TYPE' => $workType,
'UF_MATERIAL_CLASS' => $materialClass,
]);
if (!$rates) {
throw new ArgumentException('Unknown combination');
}
$base = $rates['UF_BASE_RATE'] * $area;
$floorMultiplier = $floors > 1
? pow($rates['UF_FLOOR_COEFF'], $floors - 1)
: 1.0;
$foundationMultiplier = 1.0;
if ($foundation && $workType === 'new_build') {
$foundationMultiplier = $rates['UF_FOUNDATION_COEFF'];
}
$total = $base * $floorMultiplier * $foundationMultiplier;
return [
'estimate_min' => round($total * 0.85),
'estimate_max' => round($total * 1.15),
'timeline_weeks' => $this->estimateTimeline($workType, $area),
'breakdown' => [
'base' => round($base),
'floor_adjustment' => round($base * ($floorMultiplier - 1)),
'foundation_adjustment' => round($base * $floorMultiplier * ($foundationMultiplier - 1)),
],
];
}
}
Frontend. Each step is a separate screen with animation. Data accumulates in a state object. On step 2, options are dynamically updated (foundation for new build, condition for renovation). Result is a range "from X to Y rubles" plus breakdown. All calculations are logged in the CALC_RESULTS Highload block with UTM tags for analytics.
Example configuration of the Highload block for coefficients
Fields:
-
UF_WORK_TYPE— list (new construction, renovation, reconstruction, finishing) -
UF_MATERIAL_CLASS— list (economy, standard, premium) -
UF_BASE_RATE— number (rub./m²) -
UF_FLOOR_COEFF— number (floor coefficient) -
UF_FOUNDATION_COEFF— number (for new construction) -
UF_REGION_COEFF— number (regional surcharge)
The manager adds records via the admin panel; the calculator automatically picks them up.
Process of work
| Stage | Duration |
|---|---|
| Analytics | 1–2 weeks |
| Design | 2–3 weeks |
| Core development | 3–5 weeks |
| Calculator and forms | 2–3 weeks |
| Integrations | 1–3 weeks |
| Testing and launch | 1–2 weeks |
Timelines depend on scope: from 3 weeks (catalog + portfolio) up to 24 weeks (portal with 1C integration and monitoring). Cost is calculated individually. We can deliver a basic website in just 21 days.
What's included in the work
- Documentation: infoblock structure, integration scheme, instructions for updating coefficients.
- Access: Bitrix admin panel, Highload blocks, email events.
- Training: 2–3 sessions with managers on using the calculator and portfolio.
- Support: 6 months warranty on code and integrations.
Tender system for B2B
Corporate clients upload technical specifications (up to 50 MB, PDF/DOC/DWG/ZIP) via a custom form. Files are saved in the TENDER_REQUESTS infoblock, an email event notifies the manager. An auto-reply is sent to the applicant with the request number and response deadline.
1C integration
The sale module is not used. Exchange with 1C:Construction Management via REST API — directories of counterparties, contract statuses, acts of completion. Updated once an hour via cron. Integration with 1C reduces operational costs for order processing by 25%. The standard exchange format is CommerceML (see Wikipedia).
The infoblock structure is described in the 1C-Bitrix documentation (see link).
Get a consultation on the structure of your future site — we will help you design architecture that works for both segments. Order turnkey construction company website development on 1C-Bitrix now. Contact us for a free project evaluation.







