A visitor lands on a design studio's website. They evaluate the portfolio within 3–7 seconds. If loading is slow and animations stutter, the client leaves for a competitor. One interior design studio lost 40% of leads due to slow portfolio loading. We migrated their site to 1C-Bitrix. Now loading takes 0.4 seconds, and project filtering happens without reload. Our web development studio delivers turnkey projects, guaranteeing performance and ease of management. We specialize in design studio site Bitrix development, creating the perfect website for designers. Cost for a basic site starts at $2,500, saving up to 40% on lead generation time.
We focus on development on Bitrix for design studios. Our engineers have many years of experience with Bitrix development and have completed over 50 projects for design studios. Each solution is built on tag-based caching, image optimization, and CRM integration.
How We Develop a Design Studio Website on 1C-Bitrix
Development starts with task and brand analysis. We design the information architecture, create a design concept, and get client approval. Then comes markup, Bitrix integration, caching setup, and SEO. We finish with testing and production deployment. The entire process takes 30 to 60 working days. Get a consultation with a specialist to discuss your project.
Portfolio Architecture on Information Blocks
Portfolio information block structure
The portfolio is built on a separate information block of type "Projects". Each element contains properties: Project Type (link to a directory: interior design, graphic design, web design, industrial design), Client (string linked to a CRM contact), Year (number for chronological sorting), Cover (file with auto-resize via CFile::ResizeImageGet()), Gallery (multi-file for rich media), Project Description (HTML editor), Tags (multi-link to a directory for cross-filtering). Categorization uses a two-level section structure.Filtering Portfolio Without Reload
Filtering by project type works via AJAX. We use the bitrix:catalog.section component with pagination disabled. When a category is clicked, JavaScript sends a request to ajax.php with filter parameters. The component returns an HTML fragment that is inserted into the portfolio container.
Filter parameters are passed via $arFilter: PROPERTY_TYPE, >=PROPERTY_YEAR, <=PROPERTY_YEAR, PROPERTY_TAGS (logical OR). Caching is tag-based, tied to the information block. According to the 1C-Bitrix documentation, tag-based cache automatically resets when information block elements are changed. When a new project is added, the cache is cleared via the OnAfterIBlockElementUpdate event handler.
Brief Form with File Upload
The form is created using the form module. Fields: name, email, phone, project type, description, file upload (up to 5 files, up to 20 MB each, formats PDF, JPG, PNG, AI, PSD). The submission creates a lead in Bitrix24 CRM via REST API. The manager receives a Telegram notification. Order development and we will prepare a custom proposal.
Work Process
| Phase | Content | Result |
|---|---|---|
| Brief | Fill in brief on the site, call with manager | Technical specification |
| Concept | Mood board, color palette, references | Approved concept |
| Design | Key page mockups, UI-kit | Figma file with comments |
| Approval | Iterations of revisions (up to 3 rounds) | Final mockups |
| Implementation | Markup, Bitrix integration | Working site on test server |
| Launch | Production deployment, SEO audit | Site live |
Deliverables
- Documentation: technical specifications, architecture diagram, data flow description.
- Accesses: admin panel with full permissions, source code via Git, hosting credentials.
- Training: 2 hours of video training for content managers covering portfolio updates, blog management, and form settings.
- Support: 30 days of free support after launch (bug fixes, minor edits). Paid maintenance support available for $200/month.
Design Team and Blog
The "Team" section is implemented via the "Employees" information block, linked to projects. Each card includes: photo, specialization, experience, links to Behance/Dribbble, and thumbnails of the last three projects. The "Articles" information block contains SEO properties: META_TITLE, META_DESCRIPTION, author. We use the news.detail component with Article and Open Graph microdata.
Why CSS Grid Is Better Than JS Libraries for Masonry
Classic masonry with JavaScript (Masonry.js, Isotope) adds an unnecessary dependency and requires recalculation on every DOM change. The modern approach is CSS Grid with grid-template-rows: masonry (Firefox support) or a fallback to column-count for other browsers. This is 2–3 times faster on mobile devices.
For 1C-Bitrix, the bitrix:news.list component template generates a container with class .portfolio-grid. Styles define a column layout: Desktop (1200px+) — 3 columns with gap: 24px, Tablet (768–1199px) — 2 columns with gap: 16px, Mobile (<768px) — 1 column. Each card gets class .portfolio-card with break-inside: avoid. Varying card heights create the masonry effect.
IntersectionObserver for Element Appearance
Card appearance animation on scroll is implemented via IntersectionObserver, not the scroll event. Algorithm:
- All cards initially get class
.portfolio-card--hiddenwith opacity: 0 and transform: translateY(40px). - Observer with threshold: 0.15 and rootMargin: "0px 0px -50px 0px" tracks intersection.
- When entering the viewport, the card gets class
.portfolio-card--visible, triggering CSS-transition: opacity 0.6s ease-out, transform 0.6s ease-out. - transition-delay is calculated dynamically: (index % columnsCount) * 0.1s — creates a cascade effect from left to right.
Critically: Observer is created once, and after triggering for a specific card, observer.unobserve(entry.target) is called.
CSS Transitions During Filtering
When changing a category, the transition happens in three phases:
- Fade-out: the container
.portfolio-gridgets opacity: 0 via CSS-transition of 200ms. - Content replacement: on transitionend event, the HTML from the AJAX response is inserted into the container.
- Fade-in: after DOM insertion via requestAnimationFrame, the container returns opacity: 1.
Additionally: the URL updates via history.pushState() with parameter ?type=interior, allowing sharing links to filtered portfolios.
Image Optimization
For rich-media portfolios, optimization is critical. We use loading="lazy" in the template for lazy loading. Covers are generated in three sizes via CFile::ResizeImageGet(): Thumbnail (400×300) for grid, Medium (800×600) for hover preview, Full (1920×auto) for detail page. WebP format is generated by the "Image Optimization" module or via an OnBeforeIBlockElementUpdate handler with GD/Imagick conversion.
Bitrix Edition Comparison for a Design Studio Website
| Edition | Features | When to Choose |
|---|---|---|
| Start | Information blocks, news, caching | Simple business card site with portfolio |
| Standard | All Start modules + HL-blocks, REST API | Full site with CRM integration |
| Small Business | All Standard modules + Bizproc, 1C exchange | Automation of studio business processes |
| Business | Full functionality, including cloud cache | High-load projects with tens of thousands of projects |
Contact us to discuss the right edition for your project.







