# Systenics Solutions - Full Website Content This file contains the complete, high-fidelity content of the Systenics Solutions website for AI crawler ingestion. Detailed sections follow below. Source site: https://www.systenics.com Generated: 2026-10-13T09:28:47.576Z --- ## Page: About Us | Meet the Superhero Squad | Systenics Solutions URL: https://www.systenics.com/about-us/ Description: Meet the Systenics Superhero Squad — 20 years of custom AI, Cloud, Web and AuctionWorx development with 100% successful missions for clients worldwide. # Building Squads, Products and Custom Solutions ## 100% Successful missions for past 20 years! ## We strive to provide our global clients of various sizes with cost effective benefits of offshore development while providing expert technical services. We have a Squad of well-rounded technical experts specializing in various Open Source and Microsoft technologies allowing us to apply the best mix of technologies for our client solutions. We specialize in building consumer centric and interactive Cloud, AI, Web, Desktop and Mobile application experiences. We take great pride in having Squad that constantly strives to apply the latest technology innovations to our client solutions. In this fast paced, quick changing, hi-tech world, we sprint along with our clients to ensure that the solutions we deliver for them keep pace with the current technological trends. We understand our client's key concerns while investing in offshore software development; we have modeled our processes to alleviate any doubts. We promise complete transparency, honestly, professional attitudes, prompt responses and excellent support. We have adopted iterative processes help our clients smoothly progress from conceptualizing ideas, building proto-types/wireframes to bringing their product to market, giving our clients complete visibility and control at all times. Our Squad has worked with clients of various sizes from start-up's, SME's to large enterprises located globally. We have built innovative solutions in a wide variety of business domains from Health Care, Advertising, Insurance, Marketing, Communication and Messaging, HR, Digital Media, Line of Business Applications, Saas application, Micro Services and DRM. We are Microsoft Gold Cloud Platform partners and provide the best MS Azure Cloud based solutions for our clients. Work in latest technologies Evolved processes Promise complete transparency and honesty Understand clients key concerns Go extra mile for clients Ensure client success from concept to exit Our Mission: **Spread the Happiness!** - Happy Clients - Happy Squad - Happy Society ## Meet the Team #### Saurabh Nandu Founder Being Microsoft's Most Valued Professional (MVP) in Visual C# for 4 years, a veteran on the .NET platform since the early beta's of .NET and the brains behind Systenics Solutions are only a few of the feathers in Saurabh's cap. He has not only edited and reviewed but also written books on .NET for esteemed publications. Now he's got back into deep learning on AI and how clients can benefit from it. #### Siddhi Nandu Founder Siddhi is a Computer Engineer from Mumbai University with an MBA in Finance from JBIMS. Her fresh perspective and techno-management background helped our company grow by 500%! A woman in stem, she inspires, equips and educates everyone in the Systenics' Superhero Squad! As a process person, she bring fresh prespective into AI driven optimization and automation. #### Shailesh Patel Account Manager Computer Engineer from Mumbai University and a member of our Squad for over 15 years, Shailesh with his Superhero-skills will delicately execute every mission till a perfect launch. Over the years he has launched numerous projects for international clients. Years on working with clients he has deep domain knwoledge and supprises new clients with his ablity to simplify their complex problems and offer "aha" moments and solutions. #### Nilesh Anchan Head of Engineering Nilesh's Superpowers include his analytical and problem-solving skills with result oriented approach, leadership qualities and his years of experience with a wide array of platforms. Currently focusing on WPF, MVC4/Razor with Entity Framework, Windows 8 Apps & Silverlight. He spearheads AI adoption internally as well as externally. #### Naresh Karandikar UI Naresh enjoys working on anticipating UI challenges and coming up with UI designs that make user interactions on clients' websites easy and efficient. He is happiest when he is writing HTML, CSS, with a dash of Javascript to convert those Photoshop designs to high-fidelity functional web UI. He has improvised his skills to harness the power of AI in design and videos to accelerate the design process and deliver high quality designs. --- ## Page: AuctionWorx Add-On & Customization Pricing | Systenics URL: https://www.systenics.com/auctionworx/pricing/ Description: Transparent one-time pricing for AuctionWorx mobile apps, add-ons and plugins from a RainWorx Premium Partner. No subscriptions, no hidden charges. # AuctionWorx Pricing, Out in the Open No mystery quotes. Every productized add-on and app we build for AuctionWorx has a one-time, fixed price — published right here. For custom development, we start with a free discovery call, provide ballpark estimates, and refine with detailed mockups before building in milestones. That's how a RainWorx Premium Partner does business. ## White-Label Mobile Apps Native iOS and Android apps for your AuctionWorx Enterprise or Events marketplace — white-labeled, published under your brand, one-time purchase. ### $1799 #### Buyer for AuctionWorx Enterprise/Events Edition - One Time Purchase - iOS + Android - White Labeled - Deployment Included - Buyer side features [Book a Demo](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ### $2299 #### Buyer + Seller for AuctionWorx Enterprise/Events Edition - One Time Purchase - iOS + Android - White Labeled - Deployment Included - Everything in Buyer plus seller features [Book a Demo](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) **AI Integration ### $2699 #### Buyer + Seller Pro for AuctionWorx Enterprise/Events Edition - One Time Purchase - iOS + Android - White Labeled - Adds AI title & description generation - Advanced search & swipe navigation - Multi-language support [Book a Demo](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Add-Ons & Plugins Drop-in superpowers for your existing AuctionWorx installation. One-time price, deployment included. ### $2,799 #### Barcode Listing Creation Scan a barcode, get a listing. Camera or handheld scanner, instant product images, specs and retail prices. [Learn More](https://www.systenics.com/auctionworx/barcode-listing-creation/) ### $2,699 #### AI-Enhanced Listing Descriptions AI-generated titles and descriptions for your sellers, tuned for auction conversions. [Learn More](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) ### $499 #### Listings Creation Excel Plugin Bulk-create listings straight from Excel. Hundreds of lots in minutes. [Learn More](https://www.systenics.com/auctionworx/listings-creation-excel-plugin/) ### $399 #### Community Activity Feed A live activity stream that keeps bidders on your marketplace longer. [Learn More](https://www.systenics.com/auctionworx/community-activity-feed/) ## Scoped to Your Mission Custom AuctionWorx development requires deep understanding — so here's our transparent process from initial discovery and UI/UX mockups to milestone delivery, before you commit to anything. Step 1 Discovery & Ballpark Estimate Tell us what your marketplace needs in a free discovery call. We'll assess your requirements and provide an initial ballpark estimate. Step 2 Requirements & Mockups If the ballpark works for you, we dive into full-fledged requirements gathering and UI/UX mockups to give you a far closer, real-world estimate. Step 3 Build in Milestones We build and test your custom features iteratively in clearly defined milestones, keeping you in the loop every step of the way. Step 4 Deploy & Support We deploy straight to your AuctionWorx installation and support your customization through future AuctionWorx updates. [Book a Demo](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Why Choose Systenics for Custom Development ### **Clear discovery, no guesswork We don't throw around blind quotes or let meters run unchecked. With 15+ years on AuctionWorx, we conduct a free 1st discovery call, provide ballpark estimates, and refine them with detailed mockups and requirements before kickoff. ### **Best Practices based Development As an official RainWorx partner with over 15+ years of hands-on experience, we architect customizations strictly following industry and platform best practices. We build through native extension points to deliver superior performance, robust security, and seamless upgrade compatibility that never breaks core functionality. ### **No rework bill later We've rebuilt enough "affordable" AuctionWorx projects to know the pattern: a cheap shortcut upfront turns into an emergency fix a year later, then a full rebuild once the platform outgrows it. Read [why the cheapest AuctionWorx developer costs the most](https://www.systenics.com/blogs/why-the-cheapest-auctionworx-developer-costs-the-most/). ### **A full team, not one freelancer Every custom mission draws on developers, QA and DevOps who already know the platform, not one person learning on your invoice. See [why an expert tech agency beats a solo hire](https://www.systenics.com/blogs/why-hire-an-expert-tech-agency-for-your-product-idea/). ## Pricing Questions, Answered ### Yes, for our products. Every published add-on and mobile app price on this page is a one-time purchase that includes deployment on your AuctionWorx installation. No subscriptions, no per-listing fees, no surprise renewals. ### No — AuctionWorx licenses are sold by RainWorx Software. We're a RainWorx Premium Partner: we build the apps, add-ons and customizations that run on top of your AuctionWorx Enterprise or Events license. ### We start with a free 1st discovery call and provide a ballpark estimate. If you decide to proceed, we head into detailed requirements gathering with mockups to establish a far closer, real-world project estimate. Development is then structured and billed across clear milestones with seamless deployment. ### That's most of our missions, honestly. Book a demo and tell us what your marketplace needs — after 15+ years on AuctionWorx, odds are we've built something like it before. ## Ready to Price Your Mission? [Book a Demo](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) --- ## Page: AuctionWorx Development & Customization | Systenics URL: https://www.systenics.com/auctionworx/ Description: RainWorx Premium Partner with 15+ years on AuctionWorx. Mobile apps, add-ons, customization and end-to-end auction solutions — transparent one-time pricing. # AuctionWorx Development, Customization & Platform Solutions ## Trusted RainWorx partner for enterprise builds, integrations, and product extensions [View Pricing](https://www.systenics.com/auctionworx/pricing/) * ## Work with an experienced AuctionWorx development partner Systenics Solutions is a RainWorx Premium Partner delivering AuctionWorx customization, bespoke development, mobile apps, and add-on products. We have 15+ years of experience building and customizing AuctionWorx solutions for clients of all sizes. Our close partnership with the RainWorx team helps us deliver complex marketplace workflows, integrations, and operational improvements with less trial and error. Deep understanding of AuctionWorx codebase helps us deliver faster and more powerful complex solutions for our clients across several business domains. Our processes have been fine-tuned over the years to ensure 100% project success and on-time delivery. [Get in Touch Now!](#) ## End to End Solutions for Every Domain #### Tailored AuctionWorx architectures across industries ### Antiques & Collectibles Showcase rare items with curated catalog collections, provenance tracking, high-resolution zoom galleries, and interactive community discussion boards to connect passionate collectors with vintage treasures. [Learn More *](https://www.systenics.com/auctionworx/power-your-antiques-collectibles-auction-marketplace-with-systenics/) * ### Automobile Buy & Sell Empower automotive bidding with automated VIN decoding, 360° interactive damage annotation tools, ChromeData/CarProof vehicle history integrations, and radius-based geographic inventory search. [Learn More *](https://www.systenics.com/auctionworx/end-to-end-solution-for-your-used-rare-or-new-automobile-auctions/) * ### E-Commerce Overstock Dominate the digital shelf with Amazon SP-API integrations for automated catalog ingestion, box-damage grading, reverse logistics management, and bulk liquidation workflows. [Learn More *](https://www.systenics.com/auctionworx/end-to-end-solution-for-auction-of-ecommerce-overstock-box-damaged-and-returned-items/) * ### Livestock & Husbandry Connect ranchers and breeders with multi-generation lineage tracking family trees, medical history logs, weight tracking, and precision GPS location search for transparent livestock sales. [Learn More *](https://www.systenics.com/auctionworx/streamline-livestock-auctions-with-systenics-end-to-end-solutions/) * ### Estate Sales & Liquidation Streamline on-site estate liquidations with rapid mobile inventory intake, integrated appraisal valuation tools, verified buyer bidding networks, and scheduled curbside pickup appointments. [Learn More *](https://www.systenics.com/auctionworx/end-to-end-solution-for-estate-sales-auctions-with-systenics/) * ### Property & Real Estate Scale commercial and residential property auctions with automated bidder proof-of-funds verification, secure escrow deposit holds, CRM synchronization, and legal document vaults. [Learn More *](https://www.systenics.com/auctionworx/power-your-property-auctions-with-systenics-innovative-end-to-end-solutions/) ## Our AuctionWorx Products #### Turnkey add-ons, integrations & mobile extensions * ### AuctionWorx Mobile Apps Native iOS & Android Applications Expand your active buyer pool by 50% with full-featured native iOS & Android apps. Features real-time push alerts for outbids, ending auctions, and instant biometric checkout. [Learn More *](https://www.systenics.com/auctionworx/mobile-apps/) * ### Warehouse Management Unified Inventory & Logistics Centralize your physical auction floor with bin/rack location tracking, batch QR code printing, parcel label generation, and buyer appointment scheduling in a unified dashboard. [Learn More *](https://www.systenics.com/auctionworx/warehouse-management/) * ### Live Auctions High Definition Live Streaming Broadcast live floor auctions to thousands of remote bidders in real time with ultra-low latency HD audio/video streaming, interactive clerking screens, and instant synchronized bidding. [Learn More *](https://www.systenics.com/auctionworx/live-auctions/) * ### Excel Upload Plug-In Bulk Listing Creation Tool Create hundreds of auction listings 75% faster directly within Microsoft Excel. Includes direct image upload integrations, schema validation, and automated category mapping. [Learn More *](https://www.systenics.com/auctionworx/listings-creation-excel-plugin/) * ### AI Description Generation Automated & Unique Descriptions Generate compelling, keyword-rich, and accurate listing descriptions automatically using enterprise-grade OpenAI models, enhancing search engine discoverability and buyer conversion. [Learn More *](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) * ### Barcode Listing Creation Scan & Auto-Populate Listings Accelerate cataloging by scanning UPC/EAN barcodes to automatically pull specifications, titles, and high-res images from major retail databases like Amazon and Home Depot. [Learn More *](https://www.systenics.com/auctionworx/barcode-listing-creation/) * ### Community Feed Comments, Replies, Votes & Bids Transform auction listings into high-trust social discovery hubs with live comment threads, expert seller Q&A, upvoting, and real-time bid activity streams. [Learn More *](https://www.systenics.com/auctionworx/community-activity-feed/) * ### Dutch Auctions Descending-Price Auction Engine Move bulk surplus inventory quickly with automated descending-price Dutch auction mechanics, scheduled automated price drops, and multi-quantity checkout support. [Learn More *](https://www.systenics.com/auctionworx/dutch-auctions/) * ### Volume Buy Tiered Bulk Pricing Maximize average order value and attract wholesale B2B buyers with configurable quantity-based tier pricing, dynamic discount tables, and bulk ordering workflows. [Learn More *](https://www.systenics.com/auctionworx/volume-buy/) ## Custom Modules #### Specialized components implemented in AuctionWorx * ### SMS Integration Twilio & Nexmo SMS alerts for bids, outbids & wins ### Native URL Shortener Branded short links without third-party plugins ### Auto-Complete Search Instant listing, category & seller query suggestions ### Progressive Web App (PWA) Fast, installable offline-capable browser app ### Restricted Access Listings Gated dealer tiers & verified member viewing rules ### Admin 2-Factor Auth Enhanced MFA security for admin control panel ### Custom Carousel Control Dynamic featured lot & promotional banner rotators ### Homepage Ads & Listings Monetized vendor banner placements & hero spots ### Similar Listings Engine Contextual lot recommendations to increase views ### Spire .Doc/.XLS Reports Automated invoice, manifest & settlement exports ## Custom Features & Integrations #### Engineered to extend AuctionWorx platform capabilities ### Azure Cloud Deployment High-availability auto-scaling infrastructure on Microsoft Azure ### SMS Notifications Automated real-time SMS outbid & payment reminders ### Geolocation Search Radius & distance search based on user and item coordinates ### Spire.Net Custom Reporting Bespoke financial, seller settlement, and tax report generation ### Credit Hold Authorization Pre-authorize credit card deposits before allowing bidding ### Shipment Tracking Live carrier status integration with FedEx, UPS, and USPS ### Bespoke UI Customization Tailored brand identity, responsive layouts, and modern themes ### ChromeData / CarProof Integrated automotive vehicle history and equipment specs ### Analytics & GA4 Events Comprehensive e-commerce funnel tracking and custom reporting ### Multilingual Support Localized multi-language interfaces and international currencies ### Coupons & QR Code Scan Promotional discount codes and rapid QR lot check-in tools ## Frequently Asked Questions #### Everything you need to know about AuctionWorx customization ### As a RainWorx Premium Partner with 15+ years of platform experience, Systenics builds custom features for AuctionWorx Enterprise and Events editions. Development services include custom bidding models like [Dutch auctions](https://www.systenics.com/auctionworx/dutch-auctions/) and sealed bids, tailored UI/UX design, third-party integrations (CRM, payment gateways, ERP, Twilio, and ChromeData), cloud deployments on Microsoft Azure, and ongoing platform maintenance. ### Custom development is structured across clear milestones. We start with a free discovery call to review requirements and provide an initial ballpark estimate. Next, we prepare UI/UX mockups and detailed specifications to establish a refined budget before starting development. Learn more about fixed pricing options on our [AuctionWorx pricing page](https://www.systenics.com/auctionworx/pricing/). ### Systenics offers pre-built products with deployment included as a one-time purchase. Available products include [white-label iOS and Android apps](https://www.systenics.com/auctionworx/mobile-apps/) starting at $1,799, the [Barcode Listing Creation plugin](https://www.systenics.com/auctionworx/barcode-listing-creation/) ($2,799), [AI-Enhanced Listing Descriptions](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) ($2,699), the [Excel Upload Plugin](https://www.systenics.com/auctionworx/listings-creation-excel-plugin/) ($499), and the [Community Activity Feed](https://www.systenics.com/auctionworx/community-activity-feed/) ($399). ### Systenics builds specialized tools tailored to specific auction models. Examples include real-time HD video and audio streaming for hybrid floor auctions via [Live Auctions](https://www.systenics.com/auctionworx/live-auctions/), physical inventory management with [WHMSPro warehouse management](https://www.systenics.com/auctionworx/warehouse-management/), automated VIN decoding for auto auctions, and bulk Excel ingestion tools. ### Yes. Systenics handles platform upgrades, data migrations, server transfers, and custom code refactoring to move older AuctionWorx installations to current releases on Microsoft Azure cloud infrastructure. ## AuctionWorx (How to?) #### Training Videos * ##### How to Copy Lots within Events in AuctionWorx * * ##### Bulk Relist Feature on AuctionWorx Events * * ##### Make an Offer Feature on the AuctionWorx Events [Explore Full Video Library**](https://www.systenics.com/auctionworx/videos/) --- ## Page: AuctionWorx Warehouse Management System (WMS) | Systenics URL: https://www.systenics.com/auctionworx/warehouse-management/ Description: A unified warehouse management ecosystem built specifically for AuctionWorx. Streamline inventory, packaging, and delivery. # Warehouse Management ## Built for AuctionWorx. Centralize warehousing, racks, inventory, packaging, appointments, and delivery for your business — all in one unified AuctionWorx WMS ecosystem. [Request a Demo](#) ## Key Highlights ### Unified Auction & Warehouse System Extend AuctionWorx from just bidding to full operations — manage inventories, warehouse flow, and logistics in one place. ### Employee Management Create warehouse staff, define roles, and assign permissions easily for efficient operational control. ### Add Warehouses & Racks Digitize your physical layout by adding warehouses and rack structures with intuitive tools. ### Smart Inventory & QR Labels Label products and racks with QR codes and map them for accurate tracking and fast picking. ### Calendar Appointment Booking Let buyers book time slots intelligently with visibility into high and low traffic periods. ### Packaging & Delivery Optimization Staff can pick, pack, and dispatch orders quickly with PIN-verified delivery confirmation. ## How It Works Centralize warehousing, racks, inventory, appointments, packaging, and delivery — all inside one unified AuctionWorx ecosystem. 1 #### [Add Warehouse Employee](https://www.youtube.com/watch?v=sFgJYwUIe_E&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=1) Add employees to AuctionWorx in just a few steps! This quick guide shows how sellers can easily create employee accounts, assign roles, and control access using the Employee Management feature. 2 #### [Add Warehouse](https://www.youtube.com/watch?v=0YM1R20RbwM&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=2) Add a new warehouse in AuctionWorx in just a few steps! This quick guide shows how sellers can easily create and manage warehouse locations using the Warehouse Management feature. 3 #### [Upload Racks](https://www.youtube.com/watch?v=JBat9TJspiE&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=3) Upload warehouse racks in AuctionWorx using CSV in just a few steps! This quick guide shows how to download the rack template, prepare rack data, and upload racks in bulk using the Warehouse Management feature. 4 #### [Create Inventory](https://www.youtube.com/watch?v=Yv3-Y5jqIjE&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=4) Create inventory in AuctionWorx quickly and accurately! This quick guide shows how to add missing inventory, automatically generate inventory for new listings, and assign items to racks using QR codes. 5 #### [Print & Assign Product QR](https://www.youtube.com/watch?v=LUIi6GEtgtc&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=5) Print and assign Product QR Codes in AuctionWorx in just a few steps! This quick guide shows how to generate QR labels, assign them to inventory items, and map products to rack locations using QR scanning. 6 #### [Assign Rack](https://www.youtube.com/watch?v=HhOvgwRGgLM&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=6) Assign inventory to rack locations in AuctionWorx with ease! This quick guide shows how to assign rack labels by scanning Rack QR codes or entering rack paths manually—ensuring accurate storage and quick item retrieval. 7 #### [Schedule Appointments](https://www.youtube.com/watch?v=7At39aaUxOM&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=7) Set up appointment templates and schedule slots in AuctionWorx effortlessly! This quick guide shows how to create reusable appointment templates and generate booking slots for buyers using the Appointment Management feature. 8 #### [Booking Appointments](https://www.youtube.com/watch?v=U8mqTcmQL30&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=8) Book pickup appointments in AuctionWorx in just a few steps! This quick guide shows how buyers can select invoices, choose a date and time slot, confirm bookings, and add appointments to their calendar. 9 ### [Invoice Packaging](https://www.youtube.com/watch?v=xu0C4h9XmXg&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=9) Package invoice items efficiently in AuctionWorx! This quick guide shows how staff can pick invoice items, handle retained or skipped items, and assign new rack locations during the packaging process. 10 ### [Attend Delivery](https://www.youtube.com/watch?v=uQ4PwVJQKjU&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=10) Handle delivery appointments smoothly in AuctionWorx! This quick guide shows how staff can attend delivery appointments, verify payments, assign dispatchers, and confirm deliveries using Delivery PIN verification. 11 ### [Final Delivery](https://www.youtube.com/watch?v=mHMq0Z7f9Pg&list=PLTDJEB2ocIzLJ-Q8rBE_WdHO1sa7a_cob&index=11) Complete delivery pickups securely in AuctionWorx! This quick guide shows how buyers can verify bookings, review packages, and confirm delivery using a secure Delivery PIN for smooth handover. ## Detailed Walkthrough Deep-dive into each feature with our comprehensive video tutorials. ### Employee Access & Role Management ### Manage Warehouses Efficiently ### How to Manage & Allocate Warehouse Racks ### Bulk Upload Racks with CSV ### Create Inventory & Assign Racks ### Print & Assign Product QR Codes ### How to Relocate Inventory Using QR Codes ### Schedule Appointment Slots ### How Buyers Book Pickup Appointments ### Staff Invoice Packaging Workflow ### Invoice Packaging for Skipped Items ### Attend Delivery Appointments ### Customer Delivery Pickup Experience ## See It In Action Request a live demo and experience the Warehouse Management difference. [Book a Demo](#) --- ## Page: Careers at Systenics URL: https://www.systenics.com/jobs/ Description: Meet the Systenics Superhero Squad and see how we work. All positions are currently closed — check back for future openings in .NET, AI and mobile development. # Join Our Superhero Squad [Check Open Positions](#) Check Us on [*](https://www.linkedin.com/company/systenics-solutions) ## Freshers to Superheroes ### (Vita-Rays that transform) #### In-depth Training Our freshers undergo an extensive 3-6 months of training which equips them with all our power tools (HTML, CSS, JS, C#, .NET and more!) to transform them into Superheroes! #### Mentors Having our founders and experts as their mentors through their journey, our freshers are given the opportunity to learn from and work with the best. #### International Exposure As an offshore company, we never limit ourselves to geography. Since we cater to a global clientele our squad gains exposure from all over the world. #### Personalised Career Path We have performance reviews and career meetings where our employees can discuss with us their goals for the next stretch and chart their career trajectories. ## Fresh Recruits Arshad Viva Institute of Technology (2023) Jayesh SSBT COET Jalgaon (2023) Naresh S. Thakur College of Science & Commerce (2023) Palash Pillai HOC College of Engineering & Technology (PHCET) (2023) Rohan Annasaheb Chudaman Patil College of Engineering (ACPCE) (2023) Sohan. Genba Sopanrao Moze College Of Engineering (GSMCOE) (2023) Tushar Vasantdada Patil Prathisthans' College Of Engineering (VPPCOE) (2023) Jaydip Lukhdhirji Engineering College, Morbi (2023) Adarsh Jamia Millia Islamia (2022) Arjun Viva Institute of Technology (2022) Shubham P. SIES College of Management Studies (2022) Vishal A. C. Patil College (2022) Yash New Horizon Institute of Technology and Management (NHITM) (2022) Yasar V.V.P ENGINEERING COLLEGE RAJKOT (2022) Milan Marwadi Education Foundation (2022) Taapas V.V.P. Engineering College (2022) Netra Keraleeya Samajam's Model College (2021) Shivkumar J. K. College of Science and Commerce (2021) Shubham G. Vidyavardhini's College of Engineering and Technology (VCET) (2021) Rupesh Rajiv Gandhi College of Arts, Commerce & Science (2019) ## Squad Advantages ### Power Tools The sky is the limit to learning when you work at Systenics. We are constantly harnessing the latest technologies and power tools. ### Global Missions Being a part of the Systenics Squad opens up doors worldwide- from communicating with foreign clients to using the latest international technologies. ### Hotspot for Superwomen Systenics is a hotspot for many Superwomen who dream big and aim higher! We foster an environment that equips and empowers our women employees. ### Yearly Boosters With our annual performance appraisals and salary increments we ensure that you grow at Systenics- as a person and a professional. ## How to Join Us? Step 1 Apply Apply through your college OR Apply Online Step 2 HR Interview Attend a scheduled interview with our Human Resources personnel Step 3 Coding & Technical Round Solve our coding questions to show us your technical expertise. Step 4 Interview with Founders A final interview to discuss your career trajectory and future at Systenics. ## Job Openings [*Getting Hired in Systenics as Fresher](https://www.systenics.com/blogs/getting-hired-at-systenics-as-fresher/) * ## #### Apply for Trainee Software Developer Full Name * Email Address * Phone Number * College Name Degree Year of Passing Resume * PDF, DOC, DOCX (Max 5MB) * #### Application Submitted! Thank you for applying. Our team will evaluate your resume. Only selected candidates will hear back from us within 1 week. ** #### Submission Failed Something went wrong. Please try again later. --- ## Page: Custom Software Development for Small Business | Systenics URL: https://www.systenics.com/solutions/ Description: Dedicated .NET teams, AI integration and app modernization for SMBs. Fixed-cost discovery and MVP phases — know your full budget before development begins. # Custom Software for Your Business: Our Squad Delivers ## 100% Mission success ## Our Super-Powers ### Bespoke Software Development Custom Platforms for Small Business Custom software development for small businesses and entrepreneurs — from MVP to full-scale platform, tuned to bring your ideas into fruition. Every client has a different need, different set of business problems to solve, different goals for the solutions that they want to build. We harness the power of latest technologies like Docker, Kubernetes, ASP.NET Core, Angular, MS Azure, OpenAPI in the right mix, to solve the business problems for our clients. ### Dedicated Development Squad Extended Development Center Your own dedicated .NET development team on a monthly mission, so you can focus on your business while we take care of all technology requirements. Our extended development center service provides a fully managed, expert, dedicated offshore development team without any hassle of HR, project management, office space etc. Senior developers, timezone overlap with your team, zero hiring overhead. ### AI Integration Document Processing, Chat Assistants, Automation Our dedicated AI squad integrates artificial intelligence into your business applications — features that ship to production, not science experiments. From AI document processing and data extraction to chat assistants and workflow automation, we build on Azure OpenAI and Semantic Kernel. Explore our AI lab's field notes at [Systenics AI](https://systenics.ai/) to see the squad's experiments in action. ### Application Platform Customization AuctionWorx, Umbraco CMS, Nopcommerce We provide application customization and development services for some of the following popular platforms - [AuctionWorx Development and Customization Services](https://www.systenics.com/auctionworx/development-and-customization/) - Content Management Systems - Umbraco, DotNetNuke - eCommerce Platform - Nopcommerce ### Technical Consultancy Consulting Services For Clients who already have a development team in place but are looking for requirements analysis, architectural guidelines, prototype development, best development practices and pilot applications etc. Our expert Squad can provide professional in-depth recommendations and guidelines for their development team to build upon. ### Mobile Development Android, iOS, Universal Mobile Apps We use the powerful and popular Angular and Ionic Framework to deliver cross platform hybrid mobile apps which are cost effective as well as immersive. Mobile device proliferation has certainly trounced traditional platforms. We provide best in class Hybrid HTML5 based mobile app development for Android and iOS. ### DevOps on Microsoft Azure Cloud and AWS Build CI/CD Pipelines, Automate Cloud Infrastructure Every large scale project needs a CI/CD pipeline to ensure faster and modular deployments to various environments Its essential for any Cloud Based Solutions to have DevOps Automation. Our squad is capable of configuring CI/CD pipelines in various platforms like Azure DevOps, Github Actions, Jenkins, Team City etc. ## Why choose us for your Missions? ### Technology / Domain Expertise Our CEO has been Microsoft MVP for four consecutive years as well as he has authored and technical edited many books on .NET technologies. We are Microsoft Gold Partners on the Microsoft Azure Platform, we are Premium Partners for AuctionWorx. ### Listen and Deliver Outcomes One of our core values is to LISTEN to our clients. Our Squad leaders are super sensitive to listening, analyzing and building what the client NEED's and ensuring delivery of 100% successful mission outcomes. ### In Budget, On Time, Quality Development We work on flexible payment terms, selecting the right pricing model which makes sense for client needs. Our Squad processes have been fine tuned to ensure 100% mission success on time and on budget. No surprises, No hidden costs, No date slips! ### Honesty and Transparency We have our clients best interests at our heart, always! Clients have complete visibility of the development progress to ensure the end result is always as per their expectations. ## How we save the day, the Systenics way! Stage 1 #### Requirements Gathering and Planning The most important step is the first one, where our Squad Leaders work with the client's team to listen and collaboratively build on the requirements for the mission. Stage 2 #### Iterative Development We begin development in sprints/iterations, keeping the client's team updated at every step with frequent test builds and mockups. Stage 3 #### Final Production Deployment On completion of the development and testing cycle, the application is finally installed/staged to the production servers. Stage 4 #### Support and Maintenance We have support coordinators and support ticketing systems in place to ensure our clients get timely support for their issues. ## Mission Briefing: Your Questions ### Most of our SMB missions start with a fixed-cost discovery and MVP phase, so you know the full budget before development begins. We work on flexible pricing models — fixed cost per milestone or a dedicated monthly squad — with no hidden charges and no date slips. ### Yes. Most of our clients are in the US, Canada, UK and Australia. Our squad schedules daily overlap hours with your timezone for standups, demos and support, and all communication happens in English over your preferred tools. ### You do — 100%. All code, designs and documentation produced during your mission are your intellectual property, transferred in full, with source hosted in repositories you control. ### A dedicated development squad is your own hand-picked team of Systenics .NET developers working exclusively on your product every month. We handle HR, mentoring, infrastructure and project coordination — you get senior engineering capacity without the overhead of hiring. ### Microsoft .NET (ASP.NET Core, C#), Azure cloud, Angular, Ionic mobile apps, AI integration with Azure OpenAI and Semantic Kernel, plus platform customization for AuctionWorx, Umbraco and Nopcommerce. ### Book a free discovery call. Our squad leaders listen to your business problem, then produce a requirements plan, architecture recommendation and transparent estimate — before you commit to anything. --- ## Page: Custom Software Development for SMBs | Systenics URL: https://www.systenics.com/ Description: Our Superhero Squad builds custom AI, cloud, web and mobile platforms on .NET & Azure for SMBs and entrepreneurs — fixed-cost delivery, 100% launch success. # We help build *success* build ** Custom Software ## Your partners from Concept to Exit SMBs and entrepreneurs engage our Superhero Squad to build custom solutions for their business problems — with 100% launch success** [Connect for mission launch](#) ## Our Super-Powers, Your Solutions Whatever business problem stands in your way, our Squad has a power for it. ### Custom Platform Builds Bespoke web and cloud platforms — marketplaces, portals and line-of-business apps built on ASP.NET Core and Azure, from first sketch to Mission Launch. ### AI Integration Our dedicated AI squad wires intelligence into your business — document processing, chat assistants and automation that actually ship. ### Dedicated Development Squad Your own hand-picked .NET squad on a monthly mission — senior developers, zero HR overhead, overlap with your timezone. ### AuctionWorx Customization & Products AuctionWorx customization, migration, add-on products, and mobile apps built to scale your auction marketplace. [Explore All Our Super-Powers](https://www.systenics.com/solutions/) ## Products Forged by Our Squad Ready-to-deploy sidekicks that solve real business problems today — no waiting for a custom build. ### Data Standardize Transform messy spreadsheets into pristine data. AI-powered cleaning, validation, and intelligent column mapping turn chaotic datasets into consistent output in minutes. [Power Up](https://datastandardize.com/) ### BidOnlineAuction Turn your Shopify store into a live auction arena — real-time bidding, countdown timers and popcorn bidding that keep buyers on the edge of their seats. [Power Up](https://bidonlineauction.com/) ### Bank Statements CSV PDF bank statements converted to clean CSV with 99.9% accuracy. No sign-up, files self-destruct in 24 hours — a true secret agent. [Power Up](https://bankstatementscsv.com/) ### Card Statement CSV Credit card statements to spreadsheet-ready CSV in one leap. Perfect for bookkeeping, expense tracking and reconciliation missions. [Power Up](https://cardstatementcsv.com/) ### WHMSPro Your entire warehouse operation under one roof — inventory, orders and fulfillment with QR-powered workflows. No special hardware required. [Power Up](https://whmspro.com/) ### EquipRoute Complete software for used equipment dealers — collect from consigners, store and QR-tag stock, publish listings, and deliver with a driver app. [Power Up](https://equiproute.com/) ### LiquidationRoute Warehouse software for liquidation auctions — reconcile manifests, grade and bin returns at the dock, build auction lots, and streamline buyer pickup. [Power Up](https://liquidationroute.com/) ### LotsRoute Free reseller inventory app — log purchases, calculate true costs, track auction & estate sale flips, and monitor profit offline on your phone. [Power Up](https://www.lotsroute.com/) [See All Products](https://www.systenics.com/products/) ## Cross Domain Expertise - Ecommerce - Pharma - Insurance - Auctions - Automobile - Real Estate ## Our Clients, Our Champions who Vouch for Us! ### "surpassed my expectations!" Coming from a non-technical background, Saurabh and his team at Systenics took my business idea and turned it into a fully functional application which surpassed my expectations! You can be sure with them that all your IT related concerns will be covered. ** Shobhan Shah CEO - IITJobs Inc ** ### "only one was actually able to get the job done." The ability Systenics showed in code signing and deploying my click once code in Microsoft visual was truly awesome. I interviewed and tested 6 different development companies and only one was actually able to get the job done - that was Systenics Solutions! Professional, courteous and reliable - I highly recommend them and am very happy and eager to continue growing our business relationship now and in the near future. Thank you Saurabh ** Andre Pierre President - Tech Fix Unlimited ** ### "A completely satisfied customer!" I contracted with Systenics about 6 months ago, in an effort to customize auction software for a new company I am launching in the US. The entire process was as smooth as could be. Their estimate for the project was reasonable, and very close to the final number. I would absolutely use this company again, and I have so much confidence in their ability to work with me, I even agreed to a support agreement with them long term. ** Joe Lefebvre CEO - Pharmabid, LLC ** ### "They were very thorough in project discussions" Systenics did a great job on our customization, they clearly understood the requirements and completed the task in a timely manner. They were very thorough in project discussions and made sure that we understood how the customization works and suggested improvements when required ** Mike Singh CEO - Dr. Liquidator ** ### "increase our profitability." Systenics Solutions deep understanding of the AuctionWorx platform has been invaluable to our business. They've helped us optimize our operations and increase our profitability. ** Neal Barnhill CTO - A-Stock ** ### "stay ahead of the competition." Systenics Solutions has consistently delivered innovative solutions that have helped us stay ahead of the competition. ** Rob Gaughan CTO - Pedigree Sales ** ### "I have now found the perfect team" After the inception of Lystabook in 2016, finding a team of programmers that displayed the team work, professionalism, and exuded the confidence I was searching for was difficult to come by until 2018 the year I met the magnificent team at Systenics Solutions. ** Reginald Richardson CEO - Lystabook LLC ** ### "has been instrumental" Systenics Solutions has been instrumental in the success of our online auction platform. Their development services are top-notch. ** Simon Willey CEO - MaxOGun ** ### "professionalism and commitment to excellence" Working with Systenics Solutions has been a pleasure. Their professionalism and commitment to excellence set them apart. ** Tony Director - MaxOGun ** ### "reliable and solutions-focused development partner" As an Implementation Specialist, I had the opportunity to work closely with the Systenics team throughout the delivery of a highly-customised platform.** From project scoping to launch, the team consistently demonstrated professionalism, responsiveness, and strong technical expertise. Their structured approach and clear communication ensured all of us remained informed and aligned, while their proactive mindset helped identify potential challenges early and provide practical solutions to meet our bespoke requirements. Their commitment to delivery also enabled us to successfully launch the platform ahead of schedule. I would confidently recommend Systenics to any organisation seeking a reliable and solutions-focused development partner for the delivery of a customised platform. Ged Sacramento Implementation Specialist - Gratifii ** ### "executing perfectly and always delivering on time" Working with Systenics and Auctionworx has been fantastic! Their experts provide highly professional service, executing perfectly and always delivering on time. I look forward to our ongoing collaboration and excellent results. ** Nader Abo Saleh Head of Ecommerce - AG Holding ** ### "always be counted on to deliver on time and within budget" Systenics has been a trusted and effective development partner for us since 2019. As a CTO and CEO, I've been involved in the creation of technology companies and platforms for over three decades and this is the best relationship I've ever had with a team of out-of-house developers. ** Ted Silverman CEO - Homesale Plus ** ## Why choose Systenics for your critical missions? - - - ### Cloud and AI based Solutions We are at the cusp of exciting new discoveries in Cloud and AI space which are transforming every business and its processes. Our Super Hero Tech Squad excels at building bespoke solutions to help your business leverage the power Cloud and AI to build innovative solutions. We have built [dedicated AI squad](https://systenics.ai/) to cater to this emerging market. ### AuctionWorx Premium Partner We are Premium Partners for RainWorx's [AuctionWorx platform](https://www.systenics.com/auctionworx/). We have a suite of products, mobile apps and pre-built solutions for the AuctionWorx platform. Our in-depth partnership with AuctionWorx and our squad's years of experience ensures that we can deliver scalable and complex bespoke solutions, from [development and customization](https://www.systenics.com/auctionworx/development-and-customization/) to mobile apps and integrations. ### Microsoft .Net Platform Experts Our Squad has deep expertise on the Microsoft .NET Platform. ASP.NET Core, Blazor, MAUI, TypeScript, MS SQL, LLM's and other Azure based cloud technologies. Building on the trusted Microsoft platform ensures that your solution is enterprise grade and scalable. ### Diversely Skilled Squad We have assembled a diversely skill-full squad who engages with our clients at their comfort levels. Our Squad leaders can engage with both Technical and Non-Technical clients equally comfortably. Most of our clients are non-technical, our Squad Leaders have in-depth experience to guide them through the technological maze. ### Listen and Deliver Outcomes One of our core values is to LISTEN to our clients. Our Squad leaders are super sensetive to listening, analyzing and building what the client NEED's' and ensuring delivery of 100% successful mission outcomes. ### Technology / Domain Expertise Our CEO has been Microsoft MVP for four consecutive years as well as he has authored and technical edited many books on .NET technologies. We are Microsoft Gold Partners on the Microsoft Azure Platform, we are Preminium Partners for AuctionWorx. ### In Budget, On Time, Quality Development We work on flexible payment terms, selecting the right pricing model which makes sense for client needs. Our Squad processes have been fine tuned to ensure 100% mission success on time and on budget. ### Honesty and Transparency We have our clients best intrests at our heart, always! Clients have complete visibility of the development progress to ensure the end result is always as per the their expectations to ensure 100% mission success. ### 1. Requirments Gathering and Planning The most important step is the first one, where our Squad Leaders work with the client's team to listen and collobratively build on the requirements for the mission. ### 2. Iterative Development We begin development in sprints/iterations, keeping the client's team updated at every step with frequent test builds and mockups to ensure that they are fully updated on the progress. ### 3. Final Production Deployment The application is finally installed/staged to the production servers and the client's team is given a short training on the solution. ### 4. Support We have support co-ordinators and support ticketing systems in place to ensure our client's get timely support for their issues to ensure worry-free production experience. ## Fresh Dispatches from the Squad 30-Sept-2026 ### [AuctionWorx vs the Alternatives: Choosing Your Auction Platform](https://www.systenics.com/blogs/auctionworx-vs-alternatives-choosing-your-auction-platform/) An honest comparison of AuctionWorx against SaaS auction tools, PHP scripts and no-code marketplace builders, from a team that's built on it for 15+ years. 30-Sept-2026 ### [How to Choose an AuctionWorx Development Partner](https://www.systenics.com/blogs/how-to-choose-an-auctionworx-development-partner/) Seven questions to ask before hiring anyone to customize your AuctionWorx marketplace, and why RainWorx partner status should be the first one. 20-Sept-2026 ### [AuctionWorx Enterprise vs Events Edition](https://www.systenics.com/blogs/auctionworx-enterprise-vs-events-edition-comparison/) AuctionWorx Enterprise runs marketplace listings with independent closing times, while Events Edition runs scheduled, cataloged auction sales. Here is how to pick. [Read All Dispatches](https://www.systenics.com/blogs/) --- ## Page: Privacy Policy | Systenics Solutions URL: https://www.systenics.com/privacy-policy/ Description: How Systenics Solutions collects, uses and protects your personal information across our website and services. # Privacy Policy #### Systenics Solutions wants you to fully understand our privacy practices. Your loyalty as a client, job seeker, customer or visitor is important, and we hope that our concerns regarding your privacy, as described in this policy (the "Privacy Policy" or "Policy"), demonstrate our commitment to making your experience with Systenics Solutions an enjoyable and satisfying one. Although Systenics Solutions respects the privacy of all those who visit our Web sites and use our online services, we do collect information from our visitors, including job seekers and customers. This Privacy Policy governs your interaction with the Systenics Solutions web site and your registration for and use of Systenics Solutions online services (collectively, the "Services"). Except as set forth within this Privacy Policy and other published guidelines, we do not release personally identifiable information about our members and visitors without their permission. Note that, by using the Services, you signify your agreement to this Privacy Policy. If you do not agree to this Policy, please do not use the Services. Your continued use of the Services subsequent to changes to this Policy will mean that you accept the changes. If you have any questions regarding this Privacy Policy, or any other privacy issues in connection with the Services please e-mail at info @ systenics.com. Please read this Privacy Policy to learn more about the ways in which we use and protect your personal information. Systenics Solutions reserves the right to change this Privacy Policy at any time and without any notice by posting a revised Privacy Policy on our Web site. Any such revision will become effective immediately upon posting. ##### Disclosure of Personal Information We do not share, sell or rent your personal information to third parties – ever. ##### Information We Collect and How We Use That Information Non-personally identifiable information (information that does not identify a specific individual): When visitors use the Services, we collect and aggregate information indicating, among other things, which pages were visited, the order in which they were visited, and which links were clicked. Collecting such information involves the collection and logging of IP addresses, operating system, and browser software used by each user of the Services. Although such information is not personally identifiable, we can determine from the IP address a visitor's Internet Service Provider and the geographic location of his or her point of connectivity. The non-personally identifiable information we collect helps us identify the most popular areas of our web site and determine the effectiveness of our promotional activities. We do not make use of cookies - that is, small text files placed on your computer's hard drive. ##### We do not share, sell or rent your personal information to third parties – ever. In certain areas of the Services - such as those in which you attach your résumé or send us a request for proposal - we may request that you provide us with certain personally identifiable information, such as your e-mail address and name. We will, in such situations, seek to identify which informational items are required and which are optional. Job seekers should post profiles and resumes on Systenics Solutions only if they wish such information to be viewed by Systenics Solutions recruitment team. The Services are not available to children under 18 years of age. We do not knowingly collect personally identifiable information from children under 18 years of age. Please note that Systenics Solutions cannot control the acts of users of the Services. All members and visitors should be aware that, when they disclose personally identifiable information in a resume or profile or other medium, the information may be collected and used by recruitment team to send that person email from within Systenics Solutions. In the event that you encounter any Systenics Solutions user who is improperly collecting or using information about you or other users, please contact info @ systenics.com. ##### How we use (and do not use) personally identifiable information Systenics Solutions does not sell, re-sell or distribute for re-sale your personally identifiable information. Please note that Systenics Solutions reserves the right to disclose information submitted by or concerning any visitor or member as we reasonably feel is necessary to protect our systems or business. Specifically, but without limitation, we reserve the right to disclose such information when a visitor or member is in violation of our Terms of Agreement or other published guidelines, or partakes (or is reasonably suspected of partaking) in any harmful, infringing or illegal activity, even without a subpoena, warrant, or other court order, and to disclose such information in response to court and governmental orders, civil subpoenas, discovery requests, and as otherwise required by law, as well as in response to allegations of infringement. We cooperate with law enforcement agencies in identifying those who may be using our servers or services for illegal activities. We also reserve the right to report any suspected illegal activity to law enforcement for investigation or prosecution, or to suspend or terminate your membership in connection with any suspected illegal or infringing activity. Finally, Systenics Solutions reserves the right to assign, sell, license, or otherwise transfer to a third party your personally identifiable information in connection with an assignment, sale, joint venture, or other transfer or disposition of any portion or all of Systenics Solutions or its affiliated entities, assets or stock. All information made available to Systenics Solutions may be made available to our contractors and consultants, and professional advisors (such as attorneys or accountants), but only to the extent necessary for them to perform services on our behalf, and only under a duty of confidentiality. ##### Questions? Questions regarding this Privacy Policy should be directed to info @ systenics.com --- ## Page: Software Products & AuctionWorx Add-Ons | Systenics URL: https://www.systenics.com/products/ Description: Data Standardize, EquipRoute, LiquidationRoute, BidOnlineAuction for Shopify, statement converters, WHMSPro WMS and priced AuctionWorx add-ons from a RainWorx Premium Partner. # Products built by our Superhero Squad * ## Standardize, Clean and Normalize CSV Data Messy spreadsheets are the arch-nemesis of every growing business. Data Standardize is the AI-powered sidekick that defeats them — intelligent cleaning, smart column mapping, and automated normalization that turns chaotic CSV files into pristine, consistent datasets in minutes. Built for operations teams, bookkeepers, and anyone drowning in manual data formatting missions. ### Product Details - Technologies : OpenAI, .NET Core, Gemini AI - Speciality : CSV & Data Standardization, AI Column Mapping [Read in Detail *](https://datastandardize.com/) ## BidOnlineAuction — Shopify Auction App * Turn your Shopify store into a live auction arena. Our Squad built BidOnlineAuction so merchants can unleash real-time bidding, countdown timers, popcorn bidding, reserve pricing and buy-now options — keeping buyers on the edge of their seats and driving engagement and sales with superhero-grade urgency. ### Product Details - Technologies : Shopify - Speciality : Live Bidding, Countdown Timers, Popcorn Bidding [Read in Detail *](https://bidonlineauction.com/) ## Convert PDF Bank Statement to CSV * Your bank statement to clean CSV in one leap — with 99.9% accuracy. No sign-up required, and files self-destruct in 24 hours like every good secret mission. The trusted sidekick for bookkeepers, accountants and business owners on reconciliation duty. ### Product Details - Technologies : AI, Data Extraction - Speciality : PDF to CSV Bank Statement Conversion [Read in Detail *](https://bankstatementscsv.com/) ## Convert Credit Card Statement to CSV * Credit card statements, meet your match. Card Statement CSV converts PDF statements to spreadsheet-ready CSV with 99.9% accuracy — no sign-up, files auto-deleted in 24 hours. Expense tracking, bookkeeping and reconciliation missions, completed in seconds. ### Product Details - Technologies : AI, Data Extraction - Speciality : PDF to CSV Credit Card Statement Conversion [Read in Detail *](https://cardstatementcsv.com/) ## WHMSPro – Warehouse Management Software * WHMSPro brings your entire warehouse operation under one command center. Our Squad armed it with QR-powered workflows for inventory, orders, storage and fulfillment — no special hardware needed, no chaos left standing. Built for liquidators, resellers and growing operations that outgrew spreadsheets. ### Product Details - Technologies : Web, Mobile, QR Scanners - Speciality : Warehouse Management, Order Fulfillment [Read in Detail *](https://whmspro.com/) ## EquipRoute — Software for Used Equipment Dealers * EquipRoute connects every stage of your used equipment dealership from a single platform. Collect from consigners with digital agreements and condition photos, tag and map inventory to warehouse bin locations with QR scans, publish to your sales channels simultaneously, and manage deliveries with a dedicated driver app and verified proof of delivery. ### Product Details - Technologies : Web, Mobile, QR Scanners, Driver GPS - Speciality : Consignment Intake, QR Warehouse Management, Delivery Route Proof [Read in Detail *](https://equiproute.com/) ## LiquidationRoute — Warehouse Software for Liquidation Auctions * From dock door to hammer drop, LiquidationRoute is built for liquidation auction operators handling return truckloads. Reconcile supplier manifests at the dock, apply standardized condition grades as labels print, assign warehouse bins via phone camera QR scanning, bundle items into auction lots, and streamline buyer pickup appointments without phone tag or dock congestion. ### Product Details - Technologies : Web, Mobile, QR Scanners, Multi-Channel API - Speciality : Manifest Reconciliation, Intake Condition Grading, Lot Building & Buyer Pickup [Read in Detail *](https://liquidationroute.com/) ## LotsRoute — Free Reseller Inventory & Profit Tracker App * LotsRoute is a free, offline-first inventory app for resellers who buy at auctions, estate sales, and flea markets. Log every purchase, calculate true costs including buyer's premium and fees, track your flips from purchase to sale, and monitor profit at a glance on your phone. Works 100% offline with no account, no email, and no cloud tracking required. ### Product Details - Technologies : iOS, Android, SQLite, Local Offline Storage - Speciality : On-Device Inventory Ledger, Event Purchase Tracking, Profit Analytics, Zero Account/Email Required [Read in Detail *](https://www.lotsroute.com/) ## AuctionWorx Add-Ons Running an AuctionWorx marketplace? Our Squad has built a full arsenal of add-ons and extensions for the platform — see [transparent one-time pricing](https://www.systenics.com/auctionworx/pricing/) for every add-on below. - [Mobile Apps for iOS & Android](https://www.systenics.com/auctionworx/mobile-apps/) - [Live Auctions — Real-Time Audio & Video](https://www.systenics.com/auctionworx/live-auctions/) - [Warehouse Management System (WMS)](https://www.systenics.com/auctionworx/warehouse-management/) - [Listings Creation Excel Plug-In](https://www.systenics.com/auctionworx/listings-creation-excel-plugin/) - [AI Enhanced Listing Descriptions](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) - [Barcode Listing Creation](https://www.systenics.com/auctionworx/barcode-listing-creation/) - [Community & Activity Feed](https://www.systenics.com/auctionworx/community-activity-feed/) - [Dutch Auctions Engine](https://www.systenics.com/auctionworx/dutch-auctions/) - [Volume Buy — Tiered Bulk Pricing](https://www.systenics.com/auctionworx/volume-buy/) - [Development & Customization Services](https://www.systenics.com/auctionworx/development-and-customization/) --- ## Page: Systenics Blog | Insights on AuctionWorx, .NET, Web Dev & AI URL: https://www.systenics.com/blogs/ Description: Explore our latest insights on AuctionWorx development, web technology trends, and how we # Blogs 27 Mar 2024 0 Comments ## [Systenics Website Reimagined - Relaunch!](https://www.systenics.com/blogs/systenics-website-relaunch/) **by:** Saurabh Nandu **in:** General **tags:**[*website*](https://www.systenics.com/blogs/tag/website/) Systenics Solutions has reimagined itself over the years and a brand-new website has been designed and launched which demonstrates our core values. [Continue Reading](https://www.systenics.com/blogs/systenics-website-relaunch/) * ## Latest Posts 30 Sept 2026 0 Comments ### [AuctionWorx vs the Alternatives: Choosing Your Auction Platform](https://www.systenics.com/blogs/auctionworx-vs-alternatives-choosing-your-auction-platform/) **by:** Saurabh Nandu **in:** General **tags:** [AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/) An honest comparison of AuctionWorx against SaaS auction tools, PHP scripts and no-code marketplace builders, from a team that's built on it for 15+ years. [Continue reading](https://www.systenics.com/blogs/auctionworx-vs-alternatives-choosing-your-auction-platform/) 30 Sept 2026 0 Comments ### [How to Choose an AuctionWorx Development Partner](https://www.systenics.com/blogs/how-to-choose-an-auctionworx-development-partner/) **by:** Saurabh Nandu **in:** General **tags:** [*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/) Seven questions to ask before hiring anyone to customize your AuctionWorx marketplace, and why RainWorx partner status should be the first one. [Continue reading](https://www.systenics.com/blogs/how-to-choose-an-auctionworx-development-partner/) 20 Sept 2026 0 Comments ### [AuctionWorx Enterprise vs Events Edition](https://www.systenics.com/blogs/auctionworx-enterprise-vs-events-edition-comparison/) **by:** Saurabh Nandu **in:** General **tags:** [*AuctionWorx,*](https://www.systenics.com/blogs/tag/auctionworx/)[*Auction Platform,*](https://www.systenics.com/blogs/tag/auction-platform/)[*Comparison*](https://www.systenics.com/blogs/tag/comparison/) AuctionWorx Enterprise runs marketplace listings with independent closing times, while Events Edition runs scheduled, cataloged auction sales. Here is how to pick. [Continue reading](https://www.systenics.com/blogs/auctionworx-enterprise-vs-events-edition-comparison/) 20 Sept 2026 0 Comments ### [AuctionWorx Upgrade Playbook: Protect Customizations](https://www.systenics.com/blogs/auctionworx-upgrade-playbook-keep-customizations-safe/) **by:** Saurabh Nandu **in:** Programming **tags:** [*AuctionWorx,*](https://www.systenics.com/blogs/tag/auctionworx/)[*Upgrades,*](https://www.systenics.com/blogs/tag/upgrades/)[*.NET,*](https://www.systenics.com/blogs/tag/net/)[*DevOps*](https://www.systenics.com/blogs/tag/devops/) A practical playbook for upgrading AuctionWorx without breaking your custom features, integrations, or database changes. [Continue reading](https://www.systenics.com/blogs/auctionworx-upgrade-playbook-keep-customizations-safe/) 20 Sept 2026 0 Comments ### [Build vs Buy: Custom Software vs SaaS for SMBs](https://www.systenics.com/blogs/build-vs-buy-custom-software-vs-saas-small-business/) **by:** Saurabh Nandu **in:** General **tags:** [*Custom Software,*](https://www.systenics.com/blogs/tag/custom-software/)[*SMB Growth,*](https://www.systenics.com/blogs/tag/smb-growth/)[*SaaS,*](https://www.systenics.com/blogs/tag/saas/)[*Software Strategy*](https://www.systenics.com/blogs/tag/software-strategy/) A custom software founder's perspective on when to build, when to buy, and when to extend the systems you already run. [Continue reading](https://www.systenics.com/blogs/build-vs-buy-custom-software-vs-saas-small-business/) 20 Sept 2026 0 Comments ### [Auction Platform Lessons for Marketplace Builders](https://www.systenics.com/blogs/lessons-from-auction-platforms-for-building-a-marketplace/) **by:** Saurabh Nandu **in:** General **tags:** [*Marketplace,*](https://www.systenics.com/blogs/tag/marketplace/)[*AuctionWorx,*](https://www.systenics.com/blogs/tag/auctionworx/)[*Custom Software,*](https://www.systenics.com/blogs/tag/custom-software/)[*Product Strategy*](https://www.systenics.com/blogs/tag/product-strategy/) Over fifteen years of engineering auction platforms taught us what makes two-sided marketplaces thrive. Here is what we have learned. [Continue reading](https://www.systenics.com/blogs/lessons-from-auction-platforms-for-building-a-marketplace/) - [1](https://www.systenics.com/blogs/) - [2](https://www.systenics.com/blogs/2/) - [3](https://www.systenics.com/blogs/3/) - [4](https://www.systenics.com/blogs/4/) - [5](https://www.systenics.com/blogs/5/) - [6](https://www.systenics.com/blogs/6/) - [7](https://www.systenics.com/blogs/7/) - [8](https://www.systenics.com/blogs/8/) - [9](https://www.systenics.com/blogs/9/) - [next »](https://www.systenics.com/blogs/2/) All categories - [DevOps (1)](https://www.systenics.com/blogs/category/devops/) - [General (20)](https://www.systenics.com/blogs/category/general/) - [Programming (30)](https://www.systenics.com/blogs/category/programming/) Tags - [*.NET (7)*](https://www.systenics.com/blogs/tag/net/) - [*AI (1)*](https://www.systenics.com/blogs/tag/ai/) - [*ASP.NET Core (3)*](https://www.systenics.com/blogs/tag/aspnet-core/) - [*ASP.NET MVC (16)*](https://www.systenics.com/blogs/tag/aspnet-mvc/) - [*Ajax (1)*](https://www.systenics.com/blogs/tag/ajax/) - [*Analytics (1)*](https://www.systenics.com/blogs/tag/analytics/) - [*Android (3)*](https://www.systenics.com/blogs/tag/android/) - [*Artificial Intelligence (1)*](https://www.systenics.com/blogs/tag/artificial-intelligence/) - [*Auction Platform (1)*](https://www.systenics.com/blogs/tag/auction-platform/) - [*AuctionWorx (16)*](https://www.systenics.com/blogs/tag/auctionworx/) - [*Automobile Auctions (1)*](https://www.systenics.com/blogs/tag/automobile-auctions/) - [*Azure (3)*](https://www.systenics.com/blogs/tag/azure/) - [*Bootstrap (4)*](https://www.systenics.com/blogs/tag/bootstrap/) - [*C# (7)*](https://www.systenics.com/blogs/tag/c-sharp/) - [*ClickOnce (1)*](https://www.systenics.com/blogs/tag/clickonce/) - [*Cloud Architecture (1)*](https://www.systenics.com/blogs/tag/cloud-architecture/) - [*Comparison (1)*](https://www.systenics.com/blogs/tag/comparison/) - [*Continuous Integration (1)*](https://www.systenics.com/blogs/tag/continuous-integration/) - [*Custom Software (3)*](https://www.systenics.com/blogs/tag/custom-software/) - [*Customization (2)*](https://www.systenics.com/blogs/tag/customization/) - [*Dedicated Teams (2)*](https://www.systenics.com/blogs/tag/dedicated-teams/) - [*DevOps (1)*](https://www.systenics.com/blogs/tag/devops/) - [*Development (1)*](https://www.systenics.com/blogs/tag/development/) - [*IOS (2)*](https://www.systenics.com/blogs/tag/ios/) - [*Interview (1)*](https://www.systenics.com/blogs/tag/interview/) - [*Linux (1)*](https://www.systenics.com/blogs/tag/linux/) - [*Logistics (1)*](https://www.systenics.com/blogs/tag/logistics/) - [*Marketplace (1)*](https://www.systenics.com/blogs/tag/marketplace/) - [*Mobile App (1)*](https://www.systenics.com/blogs/tag/mobile-app/) - [*Node.js (1)*](https://www.systenics.com/blogs/tag/nodejs/) - [*Offshore Development (1)*](https://www.systenics.com/blogs/tag/offshore-development/) - [*Operations (1)*](https://www.systenics.com/blogs/tag/operations/) - [*Phonegap (3)*](https://www.systenics.com/blogs/tag/phonegap/) - [*Product Strategy (1)*](https://www.systenics.com/blogs/tag/product-strategy/) - [*Razor (5)*](https://www.systenics.com/blogs/tag/razor/) - [*SMB Growth (3)*](https://www.systenics.com/blogs/tag/smb-growth/) - [*SQL CE 3.5 SP2 (1)*](https://www.systenics.com/blogs/tag/sql-ce-35-sp2/) - [*SQL Server (1)*](https://www.systenics.com/blogs/tag/sql-server/) - [*SaaS (1)*](https://www.systenics.com/blogs/tag/saas/) - [*SalesForce (3)*](https://www.systenics.com/blogs/tag/salesforce/) - [*Socket.io (1)*](https://www.systenics.com/blogs/tag/socketio/) - [*Software Architecture (1)*](https://www.systenics.com/blogs/tag/software-architecture/) - [*Software Strategy (1)*](https://www.systenics.com/blogs/tag/software-strategy/) - [*Sync Framework 2.1 (1)*](https://www.systenics.com/blogs/tag/sync-framework-21/) - [*Umbraco (11)*](https://www.systenics.com/blogs/tag/umbraco/) - [*Upgrades (1)*](https://www.systenics.com/blogs/tag/upgrades/) - [*VMWare ESXI (1)*](https://www.systenics.com/blogs/tag/vmware-esxi/) - [*Visual Studio (2)*](https://www.systenics.com/blogs/tag/visual-studio/) - [*WCF (1)*](https://www.systenics.com/blogs/tag/wcf/) - [*WPF (3)*](https://www.systenics.com/blogs/tag/wpf/) - [*Warehouse Management (1)*](https://www.systenics.com/blogs/tag/warehouse-management/) - [*Web Development (2)*](https://www.systenics.com/blogs/tag/web-development/) - [*marketing (1)*](https://www.systenics.com/blogs/tag/marketing/) - [*website (1)*](https://www.systenics.com/blogs/tag/website/) --- ## Page: AI Enhanced Listings Description Generation | Systenics URL: https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/ Description: AI-enhanced AuctionWorx listing description generation to create accurate, consistent listing content faster across high-volume catalogs. # AI Enhanced AuctionWorx Listings Description Generation ## Generate stronger, more consistent listing descriptions at scale with AI assistance. Our AI-powered product acts like a content sidekick for your team, helping generate unique and accurate descriptions for thousands of auction listings. [Contact Us](#) AI Enhanced AuctionWorx Listings Description Generation helps build unique, accurate and descriptive listing descriptions. Enjoy 25% increase in sales due to accurate and complete listing descriptions. Detailed item descriptions help enhance the SEO for the listing as well as help increase sales interest in the item. Our AI powered product helps ease the pain of generating unique descriptions for thousands of Auction listings. Core Features - Power of Open AI - Enterprise grade AI to ensure privacy of your data - Reasonable usage-based pricing - Increase in site SEO due to better descriptions - Time and effort saving for generating unique descriptions for all listings - Fully integrated into AuctionWorx saving precious time vs manually copy paste from ChatGPT ## Pricing ### One Time Fixed Cost - No Hidden Charges Includes the Buyer+Seller Pro mobile app with AI-powered description generation ## $2699 #### AI Enhanced Listings for AuctionWorx Enterprise/Events Edition - One Time Purchase - **Includes Buyer+Seller Pro Mobile App** - AI-Powered Description Generation - Enterprise Grade AI for Data Privacy - Increased Site SEO from Better Descriptions - Works on Android & iOS - Enterprise & Events Edition Support [Learn More about the Buyer+Seller Pro Mobile App **](https://www.systenics.com/auctionworx/mobile-apps/) [Contact Us](#) --- ## Page: AuctionWorx Community & Activity Feed | Systenics URL: https://www.systenics.com/auctionworx/community-activity-feed/ Description: Engage your auction community with real-time bid activity, voting, ratings and comment moderation. See bids as they happen in your activity feed. # Community & Activity Feed ## for AuctionWorx ### Engage. Vote. Bid. Together! See every bid as it happens. Our unique activity feed displays bid amounts alongside community comments, ratings, and votes — building trust and engagement like never before, powered by your AuctionWorx community sidekick. [Contact Us](#) * **Systenics Community & Activity Feed for AuctionWorx** transforms your auction listings into vibrant community hubs. Watch as bids, comments, and votes flow together in a unified activity feed — giving buyers and sellers unprecedented transparency. This is the perfect solution for those seeking a Reddit-style community auction interface. The **unified activity feed** is the game-changer. Every bid placed shows up instantly in the activity stream with the exact amount, timestamp, and bidder. Combined with community comments, upvote/downvote feedback, your marketplace builds trust organically. Core Features - **Activity Feed** — See bid amounts, comments, and votes - **Mark Top Posts** — Mark posts as top posts for greater visibility - **Upvote/Downvote Voting** — Surface the best community insights automatically - **Sorted Views** — Sort comments by New, Top Rated, or Most Helpful - **User Badges** — Moderator can assign badges to specific expert users - **User Reputation Scores** — Build trust with visible contribution counts - **Comment Moderation** — Admin controls to maintain community quality Why It Matters - Increase buyer confidence with transparent bidding - Single Activity Feed for bids, comments, and votes - Build engaged communities - Reduce disputes with visible history - Encourage repeat participation - Stand out from competing platforms ## Pricing ### One Time Fixed Cost - No Hidden Charges Note: You can purchase the mobile app separately. ## $399 #### Community & Activity Feed for AuctionWorx - One Time Purchase - Real-time Activity Feed - Community Comments & Voting - User Reputation & Badges - Sorted Views (Best/Top/New) - Admin Moderation Tools [Learn More about the AuctionWorx mobile app *](https://www.systenics.com/auctionworx/mobile-apps/) [Contact Us](#) --- ## Page: AuctionWorx Development & Customization Services | Systenics URL: https://www.systenics.com/auctionworx/development-and-customization/ Description: AuctionWorx development and customization services for integrations, feature delivery, UI upgrades, and platform enhancements by an experienced RainWorx partner. # AuctionWorx Development and Customization Services Work with an experienced team for AuctionWorx development, feature delivery, integrations, and platform customization. [Contact Us](#) Systenics Solutions is a RainWorx partner focused on AuctionWorx development and customization. Our Superhero Squad brings 15+ years of platform experience, helping teams ship features, integrations, and workflow upgrades without losing momentum. ## Why Choose Systenics? - **Premium Partners:** Our close relationship with the AuctionWorx ecosystem helps us design, estimate, and deliver customizations with less risk and fewer surprises. - **Proven Expertise:** Our Superhero developers bring hands-on delivery experience across enterprise and events implementations. - **Customized Solutions:** We don't believe in one-size-fits-all. Your customized solution will be crafted to match your specific requirements. - **Secure and Scalable Technology:** Our solutions are crafted with specific focus on security and scalability to ensure your investments give long returns. ## Our Comprehensive Development Services - **Custom AuctionWorx Development:** From concept to launch, our Superhero Squad builds and ships your priority marketplace features. - **UI/UX Optimization:** Create an intuitive, engaging user experience that keeps bidders coming back. - **Feature Integration:** Enhance your platform with innovative tools and third-party integrations like HubSpot, SalesForce, Invoicing, Payment Gateways, Escrow etc. - **Platform Migration & Upgrades:** Seamlessly transition to the latest AuctionWorx release taking advantage of the latest platform upgrades. - **Azure Cloud Hosting:** Take advantage of the best Microsoft Azure Cloud hosting infrastructure to complement your growing business. ## Our Products on AuctionWorx Platform - **AuctionWorx Mobile app for Android and iOS:** AuctionWorx Mobile application helps AuctionWorx clients who want to provide mobile experience for their customers. [Learn More](https://www.systenics.com/auctionworx/mobile-apps/) - **Live Auctions for AuctionWorx:** Live Auctions for AuctionWorx Events edition is an add-on product which brings the power for real-time, low-latency Video / Audio Live auctions to RainWorx's AuctionWorx product. [Learn More](https://www.systenics.com/auctionworx/live-auctions/) - **Listings Creation Excel Plug-In:** AuctionWorx Listings Creation Excel Plug-In has been built for RainWorx's AuctionWorx clients enabling easy creation and management of bulk listings. [Learn More](https://www.systenics.com/auctionworx/listings-creation-excel-plugin/) - **AI Enhanced Listings Description Generation:** AI Enhanced AuctionWorx Listings Description Generation helps RainWorx's AuctionWorx build accurate and descriptive listing descriptions for their auctions listings.[Learn More](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) ## Join Our Success Stories From niche collectors to large-scale liquidators, we've helped businesses of all sizes thrive in the online auction space. Our clients consistently report increased engagement, higher bid values, and streamlined operations after partnering with Systenics Solutions. **Ready to elevate your auction business?**[Contact Us](#) and call in our Superhero Squad for a practical development roadmap tailored to your AuctionWorx goals. See why Systenics Solutions is the trusted choice for serious AuctionWorx customers worldwide. --- ## Page: AuctionWorx Mobile App Development Services (iOS & Android) | Systenics URL: https://www.systenics.com/auctionworx/mobile-apps/ Description: White-label AuctionWorx mobile app development for iOS and Android. Launch buyer and seller apps with real-time bidding, push notifications, and branded workflows. # AuctionWorx Mobile App ## White-label iOS and Android apps for real-time bidding, buyer engagement, and seller workflows, built by your AuctionWorx Superhero Squad. Mobile apps for AuctionWorx Enterprise and Events Edition with branding, notifications, listings, and auction management features. [Contact Us](#) Our AuctionWorx mobile apps help auction businesses give buyers and sellers a faster, more convenient way to bid, browse, manage listings, and stay updated in real time. White-label branding, push notifications, and seller workflows make the app a practical extension of your AuctionWorx platform instead of a separate product. Think of it as your mobile sidekick for marketplace growth. Features - Native mobile application user experience - Real-time bidding on Auction listings - Push notifications on Android and iOS phones when Outbid or on Winning Auction. - Ease of use in creating/editing listings. - Use Camera or Gallery to upload photos for listings. - AI Title & Description Generation - Multiple Language Support* - Maintenance Mode ** Additional Add-On Features - Employee Specific role to restrict access to sensitive data - Migrate all website customizations to mobile app - Logo and Branding to match your website - Integration with UPC barcode (Amazon, Home Depot) for quick listing creation - Warehouse Management integration - Delivery Management and Pickup Scheduling ## AuctionWorx Mobile Apps for Buyers and Sellers ### White-label mobile experiences built for bidding, listings, and marketplace operations with Superhero-grade execution Give your customers and team a better mobile AuctionWorx experience. Our apps support real-time bidding, seller listing workflows, and on-the-go marketplace management from Android and iOS devices, without changing how your core AuctionWorx operations run. Built for real AuctionWorx missions:****Whether you need a buyer-only app or a broader buyer-and-seller experience, the mobile app extends your AuctionWorx platform with workflows that match how your marketplace actually operates. Manage Listings:****Create, edit, and manage auction listings from a phone. Upload photos, set pricing details, and keep activity moving without waiting to get back to a desktop command center. Browse and Search:****Help bidders discover listings quickly with mobile- friendly browsing, search, and filtering across your AuctionWorx inventory. Push Notifications:****Keep users engaged with alerts for outbids, wins, status changes, and important marketplace updates, exactly when action is needed. Secure and Reliable:****Deliver a stable, branded mobile experience that stays aligned with your AuctionWorx platform and operating workflows, backed by a team that already knows the platform inside out. Benefits for Buyers:****Make it easier to bid on the go, follow auctions in real time, and respond immediately when bidding activity changes. Benefits for Sellers:****Support faster listing creation, photo uploads, seller-side updates, and team responsiveness from mobile devices, so your team can move faster during peak auction windows. Available for deployment on the App Store and Google Play with your branding, workflows, and selected feature set. Your buyers get a smoother experience; your team gets a stronger mobile toolkit. ## Your Brand AuctionWorx App #### White Labelled, Perfectly Customized! * Seamless Transition from Web to Mobile Our hybrid mobile app works in iPhone, Android, and any web browser ##### Your Branding to Establish Trust Re-inforce your brand identity with logo, brand colors, and UI style ##### Published on Your App Store Accounts Full ownership of the app on the App Stores. Can access various reports generated by the App Stores. ## Mobile App Pricing #### One Time Fixed Cost - No Hidden Charges Choose the plan that best fits your auction needs ## $1799 #### Buyer for AuctionWorx Enterprise/Events Edition - One Time Purchase - Published on both iOS and Android - White Labeled - One time deployment included - Buyer side features [Book a Demo](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## $2299 #### Buyer + Seller for AuctionWorx Enterprise/Events Edition - One Time Purchase - Published on both iOS and Android - White Labeled - One time deployment included - Buyer + Seller Features [Book a Demo](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) *AI Integration ## $2699 #### Buyer + Seller Pro for AuctionWorx Enterprise/Events Edition - One Time Purchase - Published on both iOS and Android - White Labeled - All Buyer + Seller Features - AI Title & Description Generation - Advanced Search & Swipe Navigation - Multi-Language Support [Book a Demo](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) - * - ### Download Our Demo Apps Now Download our demo Buyer + Seller AuctionWorx mobile app below to explore its features. - ##### AuctionWorx Enterprise Edition - - ##### AuctionWorx Events Edition - ## Compare Mobile App Features #### Choose the Right Plan for Your Needs Explore the complete feature set of our mobile applications. Compare Buyer, Buyer + Seller, and Buyer + Seller Pro to find the right fit. Feature Buyer $1,799 Buyer + Seller $2,299 *Pro $2,699 **General Home (Default Page) ** ** ** Contact Us ** ** ** About Us ** ** ** Privacy Policy ** ** ** Terms & Conditions ** ** ** Feedback ** ** ** Category Menu ** ** ** Browse Events and Lots - Grid & List view (Events) ** ** ** Browse Listings - Grid & List view (Enterprise) ** ** ** Browse Listings or Lots ** ** ** Listing Details ** ** ** Event Details ** ** ** Lot Details ** ** ** Previous - Next Event Lots ** ** ** Follow Auctions Live ** ** ** Q&A ** ** ** Share Listing or Lot (with Deep Link) ** ** ** Google Maps ** ** ** Multi-Currency ** ** ** Custom Field Types (Clickable Links, Large Text Areas, Data Lists, Option Lists) ** ** ** Advanced Search ** ** ** Recent Search ** ** ** Swipe to see more Lots ** ** ** Multi-Language Resource based including Arabic Support (additional cost) ** ** ** **Accounts Login ** ** ** Registration ** ** ** My Account Summary ** ** ** My Account ** ** ** Edit Account ** ** ** Change Password ** ** ** Forgot Password ** ** ** Credit Card ** ** ** Addresses ** ** ** Messaging ** ** ** Site Fees ** ** ** My Active Bids ** ** ** Invoices ** ** ** Invoice Details ** ** ** Bid History ** ** ** Offer History ** ** ** **Seller Create / Edit Event ** ** ** Create / Edit Lot ** ** ** Create / Edit Listing ** ** ** My Listings ** ** ** Events - Draft, Published, Closed, Archived, Sales Reports, Seller Invoices ** ** ** Consignor - Manage Consignors, Active, Statements, Fees, Preferences, Reports ** ** ** Event - Sale Reports, View Lot Order, View Auto Extend Group, View Invoices, Email All Invoices ** ** ** Event - Summary, Create Similar Event, Create All Invoices, Archive Event, Change Event Owner ** ** ** Listing - Draft, Active, Scheduled, Successful, Unsuccessful, Ended, Sales Reports, Invoices, Invoice Reports ** ** ** Listing - Edit, Delete, End Early ** ** ** Lot - Extend Lot Group, Delete, List Similar, End Early, Edit ** ** ** Audit Bid History (Admin only) ** ** ** **AI Title & Description Generation ** ** ** **Push Notifications Admin Dashboard ** ** ** Outbid ** ** ** Purchase (Fixed & Lot) ** ** ** Daily Watchlist Summary ** ** ** Bidder Reminder to Bidder Or All Users (Event Closing) ** ** ** Listing Ended Unsuccessfully (Seller) ** ** ** Closing Soon (Lot & Listing) ** ** ** New Event Published Notifications ** ** ** User Push Notification Preference ** ** ** Push Notify - Site Announcement ** ** ** Notification History - All included in Push Notify ** ** ** **App Settings Features Mobile App Settings ** ** ** App Settings - Store Links, App Icon, Splash Screen, Stripe Keys, OneSignal Keys ** ** ** Home & Category Banner ** ** ** Enable Consignors ** ** ** Enable Regions ** ** ** Display Site Time Zone ** ** ** User Messaging ** ** ** Feedback ** ** ** Require Authentication ** ** ** Show Bid History User Names ** ** ** Under Construction Mode ** ** ** Time Remaining Style ** ** ** Force Mobile App Update ** ** ** Firebase Analytics ** ** ** ** Included ** Not Available ** Pro Exclusive ## Terms and Conditions One-Time Cost**** The AuctionWorx mobile apps are provided with a one-time cost and supported only on the latest version of RainWorx AuctionWorx software at the time of purchase and is liked with that version. Support**** Post-deployment, we offer free email support for AuctionWorx mobile app issues reported within the first 30 days. This includes bug fixes only. Annual Charges**** We do not charge any annual maintenance fees. Customization**** If you require new features, design changes, or version upgrades, these will be treated as customization requests and estimated separately and implemented upon your approval. AuctionWorx Platform Updates**** RainWorx provides two kind of releases: - Minor releases** which usually have bug fixes but releases frequently - **Major version releases** which can contain a larger number of new features as well as bug fixes. These may get released once a year. **Minor Release Update**** It's not possible to update the mobile app for every new minor release, we will internally assess whether any new features are critical to the mobile app. Based on that evaluation, we may update the app accordingly. These updates are not guaranteed and are handled at our discretion. There is a smaller cost (around $300) involved if the customer wishes to update to the new minor release, both website migration as well as mobile app migration need to be undertaken. Major Release Update**** RainWorx usually releases new features on major releases. So evaluating those features larger set of new features may get enabled in the mobile app as well. Hence there is a larger cost for both website and mobile app migration to the largest major release. Its at customers discretion to update the app. If a customer has made larger number of customizations then their cost increases in proportion to the effort required to migrate and test the new releases. Mobile OS Compatibility & Future Upgrade Costs**** Every 1–2 years, Google and Apple mandate updates to all mobile applications to ensure compatibility with the latest Android/iOS versions. Such upgrades will be chargeable. Based on the past experience, the AuctionWorx mobile app compatibility upgrade costs typically range between USD $500–$1000, though in some cases they may be lower. Apple Developer Account Renewal**** Since we publish white label mobile apps under the customers account on the Mobile App Store. The customer needs to renew their Apple Developer account annually (USD $99). Failure to do so may result in Apple delisting your app from the App Store. 3rd Party Services**** We use OneSignal services for Push Notifications to mobile devices. AI subscriptions are using for AI Title & Description Generation. Barcode Lookup Service is used for product lookup. Based on the usage of these services, the customer may have to pay for the higher plans from these service providers. IP and Source Code**** The AuctionWorx mobile app built by Systenics, the IP (Intellectual Property) is owned by Systenics Solutions LLP. We do not distribute the source code of the mobile app and its customizations to any customer. The client is provided with a self-use license world-wide. If a client wants to own IP, then a separate customized app can be provided for them. AuctionWorx Customizations and Changes**** Once the AuctionWorx mobile app is deployed for the customer any new customizations of migrations on the AuctionWorx website as well as mobile app can only be done by Systenics. No 3rd party developer or company is provided with the source code to perform other customizations or migrations. Liability and Losses**** Systenics provides the AuctionWorx mobile app as is basis. Systenics is not liable for indirect, special, or consequential damages. Guarantee of App Publish on Mobile Stores** Both Apple and Google, keep updating their app stores policies from time to time. There are certain business which are not allowed on the app store. Systenics will make best effort to comply with all policies but cannot guarantee listing of the mobile app on the app store. --- ## Page: AuctionWorx Video Tutorials & How-To Guides | Systenics URL: https://www.systenics.com/auctionworx/videos/ Description: Explore our library of AuctionWorx tutorials. Learn how to configure Enterprise and Event editions, manage listings, and optimize your auction platform. Mission Support # AuctionWorx How To Videos Master your AuctionWorx mission. Built by our expert Superheroes to help you succeed. Filter by version and edition to find the exact tactical briefing you need. ** ##### Filters ###### Version * AuctionWorx v3.6 AuctionWorx v3.5 ###### Edition Enterprise Edition Events Edition * ##### Filters ###### Version * AuctionWorx v3.6 AuctionWorx v3.5 ###### Edition Enterprise Edition Events Edition * * Showing all 53 videos * 1:38 3.6 Enterprise ###### [Organize Users Data Using Option List Dropdowns in AuctionWorx Enterprise 3.6](#) * * 1:33 3.6 Enterprise ###### [Turn Text into Clickable Links For Users in AuctionWorx Enterprise 3.6](#) * * 1:04 3.6 Enterprise ###### [Add to Watchlist as You Browse in AuctionWorx Enterprise 3.6](#) * * 1:22 3.6 Enterprise ###### [Configure Option List Radio Button Custom Fields for Listings in AuctionWorx Enterprise 3.6](#) * * 1:20 3.6 Enterprise ###### [Organize Listing Data Using Option List Dropdowns in AuctionWorx Enterprise 3.6](#) * * 1:16 3.6 Enterprise ###### [Discover the Power of Multi-Column List Fields in AuctionWorx Enterprise 3.6](#) * * 1:31 3.6 Enterprise ###### [Use Large Text Areas to Enhance Listings in AuctionWorx Enterprise 3.6](#) * * 1:15 3.6 Enterprise ###### [Turn Text into Clickable Links For Auction Listing in AuctionWorx Enterprise 3.6](#) * * 1:10 3.6 Enterprise ###### [How to Add Google Maps to Auction Listings in AuctionWorx Enterprise 3.6](#) * * 1:22 3.6 Events ###### [Organize Lot Data Using Option List Dropdowns in AuctionWorx Events 3.6](#) * * 1:15 3.6 Events ###### [Discover the Power of Multi-Column List Fields in AuctionWorx Events 3.6](#) * * 1:31 3.6 Events ###### [Use Large Text Areas to Enhance Lots in AuctionWorx Events 3.6](#) * * 1:15 3.6 Events ###### [Turn Text into Clickable Links For Auction Lots in AuctionWorx Events 3.6](#) * * 1:13 3.6 Events ###### [New Search & Browse Tools for Auction Events in AuctionWorx Events 3.6](#) * * 1:10 3.6 Events ###### [How to Add Google Maps to Auction Listings in AuctionWorx Events 3.6](#) * * 1:21 3.6 Events ###### [Configure Option List Radio Button Custom Fields for Lots in AuctionWorx Events 3.6](#) * * 1:04 3.6 Events ###### [Add to Watchlist as You Browse in AuctionWorx Events 3.6](#) * * 1:51 3.6 Events ###### [Customize Auction Event List Display Styles in AuctionWorx Events 3.6](#) * * 1:13 3.6 Events ###### [Discover the Power of Multi-Column List Events Fields in AuctionWorx Events 3.6](#) * * 1:38 3.6 Events ###### [Organize Events Data Using Option List Dropdowns in AuctionWorx Events 3.6](#) * * 1:22 3.6 Events ###### [Configure Option List Radio Button Custom Fields for Events in AuctionWorx Events 3.6](#) * * 1:34 3.6 Events ###### [Use Large Text Areas to Enhance Events in AuctionWorx Event 3.6](#) * * 1:10 3.6 Events ###### [Turn Text into Clickable Links For Auction Events in AuctionWorx Events 3.6](#) * * 2:18 3.5 Enterprise ###### [Configuring Multiple Currencies in AuctionWorx Enterprise](#) * * 1:46 3.5 Enterprise ###### [Extend Listings on AuctionWorx Enterprise - Easily Manage Auction Timelines](#) * * 1:13 3.5 Enterprise ###### [Boost Your Auctions with YouTube Videos in AuctionWorx Enterprise](#) * * 1:46 3.5 Enterprise ###### [A Guide to Adding and Editing SEO on the AuctionWorx Enterprise](#) * * 1:45 3.5 Enterprise ###### [Bulk Relist Feature on AuctionWorx Enterprise - Efficient Auction Management](#) * * 2:22 3.5 Enterprise ###### [Auto Relist Feature on AuctionWorx Enterprise - Complete Setup Guide](#) * * 1:36 3.5 Enterprise ###### [Understanding Proxy Bidding on the AuctionWorx Enterprise - A Complete Guide](#) * * 1:43 3.5 Enterprise ###### [Change Site Header & Layout on AuctionWorx Enterprise - Customization Guide](#) * * 2:01 3.5 Enterprise ###### [Master the Search Listings Tool on AuctionWorx Enterprise](#) * * 1:51 3.5 Enterprise ###### [Large Bid Confirmation on AuctionWorx Enterprise- How to Enable & Use](#) * * 2:04 3.5 Enterprise ###### [Post Questions & Answers on AuctionWorx Enterprise - Step-by-Step Tutorial](#) * * 2:38 3.5 Enterprise ###### [Promote and Highlight to Upgrade Your Listings on the AucionWorx Enterprise](#) * * 1:48 3.5 Enterprise ###### [Enable Under Construction Mode Feature on the AuctionWorx Enterprise](#) * * 2:13 3.5 Enterprise ###### [Create Classified Listing on the AuctionWorx Enterprise - Easy Tutorial](#) * * 2:05 3.5 Enterprise ###### [Create Fixed Price Listing on the AuctionWorx Enterprise - Easy Tutorial](#) * * 3:01 3.5 Events ###### [How to Copy Lots within Events in AuctionWorx](#) * * 2:43 3.5 Events ###### [How to Move Lots within Events in AuctionWorx](#) * * 2:08 3.5 Events ###### [How to Search Lots in AuctionWorx](#) * * 2:43 3.5 Events ###### [Mastering Advanced Search in AuctionWorx](#) * * 2:32 3.5 Events ###### [How to Edit Email Templates in AuctionWorx](#) * * 3:50 3.5 Events ###### [How to Customize Static Content in AuctionWorx](#) * * 2:49 3.5 Events ###### [Static Content Examples in AuctionWorx](#) * * 2:16 3.5 Events ###### [How to Change the Seller of an Event in AuctionWorx](#) * * 2:50 3.5 Events ###### [Make an Offer Feature on the AuctionWorx Events : Step-by-Step Overview](#) * * 4:11 3.5 Events ###### [Custom Fields in AuctionWorx Events - Comprehensive Guide](#) * * 2:10 3.5 Events ###### [Change Site Logo on the AuctionWorx Events : Easy Tutorial](#) * * 2:12 3.5 Events ###### [Create Classified Listing on the AuctionWorx Events - Easy Tutorial](#) * * 1:47 3.5 Events ###### [Enable Under Construction Mode Feature on the AuctionWorx Events](#) * * 2:20 3.5 Events ###### [Promote and Highlight to Upgrade Your Lots on the AucionWorx Enterprise](#) * * 2:05 3.5 Events ###### [Create Fixed Price Listing on the AuctionWorx Events - Easy Tutorial](#) ** #### No signals found Try adjusting your filters or search terms to re-establish contact. --- ## Page: Dutch Auctions: Descending-Price Auction Engine | AuctionWorx URL: https://www.systenics.com/auctionworx/dutch-auctions/ Description: Turn stagnant inventory into urgency-driven sales with Dutch Auctions for AuctionWorx. Automate descending-price strategies with reusable templates, flexible scheduling, and zero re-entry. # Dutch Auctions for AuctionWorx ## Turn stagnant inventory into urgency-driven sales with descending-price auctions. The price drops. The clock ticks. Buyers act fast. Our Squad built the ultimate Dutch Auction engine so your inventory moves — on autopilot. [Get in Touch](#) ## Inventory Sitting on the Shelf? Traditional auctions rely on ascending bids — but what happens when buyers aren't competing? Your items sit. Bids don't come in. Warehouse costs pile up. Dutch Auctions flip the model and get your inventory **moving**. ** #### Traditional Auction Ascending Bid - Price starts low and rises with competitive bids - Relies on multiple active bidders competing - Sold to the highest bidder at the end - Risk: Items may go unsold if no bids come in ** #### Dutch Auction Descending Price - Price starts high and drops in automated steps - Instant buy when a buyer accepts the current price - Price freezes on purchase — no waiting for auction end - **Result:** Urgency drives action, inventory moves fast ## That Dropping Price Creates Real Urgency Every tick of the countdown moves you closer to a sale. Dutch Auctions transform passive browsers into decisive buyers. ** #### Urgency Buyers act fast as prices drop. Every second the clock ticks, the deal gets better — creating a natural pressure to commit before someone else does. ** #### Demand Attract buyers who skip traditional auctions. A transparent, dropping price appeals to bargain hunters and strategic buyers who want a fair deal on their terms. ** #### Sales Liquidate overstock, slow-moving, and returned inventory efficiently. Dutch Auctions transform warehouse deadweight into revenue — automatically. ## How It Works Three steps. Full autopilot. Drop Configuration **Discount Strategy** **Fixed Amount / Percentage / Variable **Minimum (Floor) Price** $ 1,000 **Drop Amount** $ 50 **Drop Interval** 60 minutes Step 1 ### Set Your Pricing Rules Configure exactly how the Dutch Auction price decreases over time. Choose from **Fixed Amount**, **Percentage**, or **Variable** discount strategies. Set your floor price to ensure you never sell below your minimum — our Squad engineered this for **complete control**. Define the drop amount and interval once, and the engine handles the rest. Prices decrease automatically at your configured cadence until a buyer accepts or the floor is reached. Schedule & Activation **Start Date** 06/29/2026 **End Date** 07/02/2026 **Time Ranges** 8:00 AM – 9:00 AM 12:00 PM – 3:00 PM 5:00 PM – 7:00 PM **Recurrence** **Daily / Weekly Step 2 ### Schedule Your Execution Run it on your schedule — or keep it running daily. Set date ranges, define **multiple time windows** throughout the day, and choose **Daily or Weekly** recurrence patterns. The mission runs itself. Perfect for "Friday Flash Sales" or daily clearance windows. Prices drop only during active time windows, giving you precise control over when the action happens. Listing Feature **Feature Type** **Dutch Auction Templates **Select Template** **DA 01 Template **Template applied — that's it! Step 3 ### Apply Templates to Listings Create a template. Reuse it forever. Build your Dutch Auction strategy once, then apply it to any listing with a single click. Select a template at listing creation —**that's it**. One template can power Listing A, B, C and beyond. No re-entry, no reconfiguration. Your team saves time and maintains consistent pricing across the board. Why It Matters ## Built for Teams Running Auctions at Scale ** #### Reusable Templates Build once, use everywhere. Define your Dutch Auction strategy once and apply it across hundreds of listings. ** #### Automatic Scheduling Phases sequence themselves. Set time windows and recurrence, and the price drops handle themselves — on mission autopilot. ** #### Zero Re-Entry Consistent pricing, every time. No manual reconfiguration needed. Your team focuses on the mission while the engine runs the auctions. [Connect for Mission Launch](#) ## The Buyer Experience Simple, transparent, and compelling for your customers. Dutch Auction Current Price $1,000.00 Next drop 0 Days 01:47:11 Floor price: $100.00 Accept Current Price Buyers see the **current price**, the **countdown to the next drop**, and the **floor price** — all in one clean interface. One click on "Accept Current Price" and the deal is sealed instantly. No waiting for auction end. No outbidding. The buyer decides when the price is right and acts. It's a mission-ready buying experience that drives conversions. ## Perfect For These Missions Dutch Auctions supercharge results across multiple auction domains. ** ##### Overstock & Returns Clear out surplus inventory, box-damaged, and returned items with automated price drops. ** ##### Estate Sales Move large inventories efficiently with timed price reductions that drive buyer action. ** ##### Antiques & Collectibles Create urgency for rare items with descending prices that reward decisive collectors. ** ##### eCommerce Liquidation Run daily or weekly clearance sales on autopilot with scheduled price drops. ## Ready to Launch Dutch Auctions? Our Squad is ready to power up your AuctionWorx platform with Dutch Auctions. Connect with us for mission launch. [Get in Touch Now!](#) --- ## Page: eCommerce Listing Creation via Barcode | Systenics URL: https://www.systenics.com/auctionworx/barcode-listing-creation/ Description: Scan product barcodes to auto-populate AuctionWorx listing details from Amazon & Home Depot. Save time with our barcode-to-listing sync. # eCommerce Listing Creation using Barcode ## for AuctionWorx ### Scan. Fetch. List. In seconds! Auto-populate listing details and images from Amazon & Home Depot by simply scanning a product barcode [Contact Us](#) **Systenics eCommerce Listing Creation Mobile App for AuctionWorx** revolutionizes how you create auction listings. Simply scan a product's barcode and watch as the app instantly fetches complete product details including images from leading eCommerce stores like **Amazon** and **Home Depot**. This solution is engineered specifically for **high-volume warehouses**,**liquidation sellers**, **resellers**, and businesses handling large quantities of inventory. Instead of typing product data manually, your team can scan the barcode, review the auto-filled details, and publish listings with greater speed and consistency. Available for both **Sellers** creating their own listings and **Employees** managing listings on behalf of the business. Whether you're processing returns, overstock, or box-damaged items, our barcode scanning feature eliminates tedious manual data entry, dramatically reduces errors, and provides a faster, smarter workflow. Transform your listing workflow from minutes to seconds. Scan once, and get the Title, Description, Category, UPC, and even Product Images — all auto-populated and ready for your AuctionWorx event. Move from item intake to live listings in seconds! Core Features - **Auto-Fetch from Amazon & Home Depot** — Scan UPC barcodes to retrieve complete product information - **Saves Time & Reduces Errors** — Eliminate manual data entry and typos - **Product Images Included** — Automatically retrieves product photos from the source - **Cross-Platform** — Works on both Android and iOS devices - **For Sellers & Employees** — Flexible access for different user roles - **Works with AuctionWorx Enterprise & Events** — Seamlessly integrates with both editions - **80%+ Faster Listing Creation** — Go from scan to published listing in seconds * Barcode Scanner Auto-Populated Details Fetched Images ## Pricing ### One Time Fixed Cost - No Hidden Charges Includes the Buyer+Seller mobile app with barcode scanning capabilities ## $2799 #### Barcode Listing Creation for AuctionWorx Enterprise/Events Edition - One Time Purchase - **Includes Buyer+Seller Mobile App** - Barcode Scanning from Amazon & Home Depot - Auto-Populate Title, Description & Images - Works on Android & iOS - Enterprise & Events Edition Support [Learn More about the Buyer+Seller Mobile App *](https://www.systenics.com/auctionworx/mobile-apps/) [Contact Us](#) --- ## Page: Listings Creation Excel Plug-In | Systenics URL: https://www.systenics.com/auctionworx/listings-creation-excel-plugin/ Description: Bulk create and manage AuctionWorx listings up to 75% faster with our Excel Plug-In for Enterprise and Events editions. # AuctionWorx Listings Creation Excel Plug-In ## Bulk-create listings up to 75% faster. Bulk Create/Manage AuctionWorx Listings without leaving MS Excel [Contact Us](#) AuctionWorx Listings Creation Excel Plug-In has been built for RainWorx's AuctionWorx clients enabling easy creation and management of bulk listings. Auction listing creation and management can end up being a huge hassle as the number of items grows. Our clients report 75% time savings for creating bulk listing compared to Import CSV feature. Our plug-in minimizes errors, makes uploading listing images a breeze. Systenics' Excel Plug-In helps your backend team to create and manage listings without leaving Excel! This brings significant speed and time benefits in creation and management of bulk listings. Core Features - Works for both AuctionWorx Enterprise and Events Edition - Supports creation of 100's of listings from 1 Excel sheet - Supports direct listing file uploads from Excel itself - Save time and money managing multiple listings from a single Excel sheet - Combine the plug-in with 'Employee' role feature to ensure limited access provided only to Employees to generate listings - Cross-Platform works on Windows and Mac - Needs Office 2019 or Office 365 version Excel ## Pricing ### One Time Fixed Cost - No Hidden Charges Get the Excel Plugin for a one-time fee ## $499 #### Listings Creation Excel Plug-In for AuctionWorx Enterprise/Events Edition - One Time Purchase - Enterprise & Events Edition Support - Unlimited Bulk Listings - Image Import Features - Windows & Mac Compatible [Contact Us](#) --- ## Page: Live Auctions: Real-Time Audio & Video | Systenics URL: https://www.systenics.com/auctionworx/live-auctions/ Description: Add real-time audio and video streaming to your AuctionWorx platform with low latency and support for 1000+ concurrent users. # Real-Time Live Auctions for AuctionWorx ## Stream your live auction to 1000+ online users on desktop and mobile in high definition. Experience the power of Low-Latency Live Streaming. Conduct Online and Offline auctions simultaneously. [Contact Us](#) Your browser does not support the video tag. Live Auctions for AuctionWorx Events edition is a white labeled add-on product which brings the power for real-time, low-latency Video / Audio Live auctions to RainWorx's AuctionWorx product. Built upon the robust AuctionWorx platform, Live Auctions enables a whole new set of capabilities for clients looking to conduct simultaneous Online and Offline live auctions. The Live Auction product can be deployed on your personal servers or the cloud close to the clients servers to ensure real-time, low-latency Video / Audio Live auctions experience. Live Streaming Features **High quality broadcasting****Enjoy the clarity of full HD live broadcasting with no bitrate or resolution restrictions. Low Latency streaming****Real time audio video transmission with a latency of 500ms or less. Adaptive streaming****Adaptive streaming technology ensures that your users are able to view live streaming based on their device bandwidth capability. Record your broadcasts****Record your broadcasts and share them with your audience for future viewing. Mobile compatible****Use modern smartphones to capture high quality videos without the need of specialized equipment. Legacy software compatible****Take advantage of the legacy streaming software platforms like OBS Studio, Wirecast, and more. Live Auctions Features Easy Live auction setup****Get your Live Auctions scheduled quickly and easily with our service. Multi-channel setup****Take advantage of multi-channel support for streaming with audio only mode and video independently. Offline Auction Team****Create efficient offline auction team for enhancing action results. Dedicated Auctioneer screen.****Auctioneering made easy with a dedicated screen for tracking bids and see who is winning. Mobile compatible****Use modern smartphones to capture high quality videos without the need of specialized equipment. Legacy software compatible****Take advantage of the legacy streaming software platforms like OBS Studio, Wirecast, and more. ## How Live Auction Works Built upon the robust AuctionWorx platform, Live Auctions enables a whole new set of capabilities for clients looking to conduct simultaneous Online and Offline live auctions Schedule an Event and Team:****The seller has the ultimate authority to plan and execute the Event Live, as well as assign team members for offline activities. Schedule your Live auctions date and time. Setup your Offline team. Setup your video recording:****Start Streaming and Bidding The Offline team is equipped with the tools to manage the Auctions during Live Event. Recorder starts the stream Event managed by the team:** Team member manages offline bids Stop Streaming and End Event. The event is stopped by the Team Manager. Recorder stops the recording. Team member stops the Event. Event is closed --- ## Page: Volume Buy: Tiered Bulk Pricing | AuctionWorx Enterprise URL: https://www.systenics.com/auctionworx/volume-buy/ Description: Boost your average order value and attract wholesale buyers with Volume Buy for AuctionWorx. Offer real-time tiered discounts to incentivize bulk purchases. # Volume Buy for AuctionWorx ## Boost average order value with automated tiered bulk pricing. The more they buy, the more they save. Our Squad built the ultimate Volume Buy feature so you can offer real-time wholesale discounts and move inventory faster — with 100% mission success. [Connect for Mission Launch](#) ## Selling One Item at a Time? Standard fixed pricing is great for retail, but what happens when you have deep inventory? Buyers want deals for buying in bulk, and without built-in incentives, you miss out on massive B2B orders.**Volume Buy** changes the game by automatically discounting prices based on quantity. ** #### Standard Listing Fixed Price - Price remains identical regardless of quantity - No incentive for buyers to increase order size - Alienates wholesale and B2B customers - Risk: Slower inventory turnover ** #### Volume Buy Tiered Bulk Pricing - Price drops automatically as quantity increases - Real-time dynamic price updates for the buyer - Transparent discount tiers encourage larger orders - **Result:** Higher Average Order Value and fast liquidation ## Incentivize Big Orders Our experts designed Volume Buy to empower your marketplace. It transforms standard checkouts into highly optimized wholesale engines. ** #### For Sellers Drastically boost Average Order Value (AOV), attract B2B wholesale buyers, and clear out overstock inventory rapidly with automated bulk incentives. ** #### For Buyers Transparent tiered discounts make it easy to see the savings. The unit price updates dynamically in real-time, delivering a seamless checkout experience. ** #### Dashboard Control Manage your discount campaigns right from the seller dashboard. Track Volume Buy transactions seamlessly alongside your standard orders. ## How It Works Three steps to wholesale success. Seller Setup **Volume Buy** **Enable Volume Buy **Tier 1** Buy 5 - 9 at $45.00/each **Tier 2** Buy 10+ at $40.00/each Step 1 ### Define Your Tiers The seller simply checks "Enable Volume Buy" during listing creation. You configure the minimum and maximum quantities for each tier and assign a discounted unit price. Set as many tiers as you need to drive wholesale demand. The pricing rules are instantly saved and applied to your listing. Buyer Interaction **10+ Items** $40.00 / ea **Quantity: 12 ** Total: $480.00 Step 2 ### Dynamic Price Updates Buyers see a clean, dedicated pricing table directly on the listing page. As they adjust the purchase quantity, the active tier is highlighted instantly. The unit price and total price update dynamically in real-time, providing total transparency and encouraging buyers to hit the next discount threshold. Invoice & Checkout **Shopping Cart** Product (x12) $40.00 ea Step 3 ### Seamless Checkout The selected tier pricing is securely locked in and carries over seamlessly through the cart and the checkout process. The final invoice clearly displays the discounted unit price, ensuring buyers are confident in their savings from start to finish. ## Perfect For These Missions Volume Buy powers up bulk sales across different domains. ** ##### B2B & Wholesale Perfect for platforms catering to business buyers who purchase supplies in massive quantities. ** ##### Overstock Liquidators Clear out warehouses quickly by offering irresistible bulk discounts on surplus inventory. ** ##### Retail Marketplaces Increase consumer order sizes for daily goods by showing them exactly how much they save. ## Ready to Empower Your Sellers? Our Squad is standing by to integrate Volume Buy into your AuctionWorx platform. Transform your sales strategy and connect with us for mission launch. [Get in Touch Now!](#) --- ## Page: Antiques & Collectibles Auction Marketplace Solutions | Systenics URL: https://www.systenics.com/auctionworx/power-your-antiques-collectibles-auction-marketplace-with-systenics/ Description: Create a trusted marketplace for rare treasures. Secure auction software for antiques, artifacts, and collectibles with community engagement features. # End-to-End Solutions for Antiques & Collectibles Auctions ## Increase sales by 50% [Get Started Now!](#) * The world of antiques and collectibles demands authenticity, trust, and a seamless user experience. Systenics delivers custom software solutions to help auction houses and marketplaces showcase rare items, connect with passionate collectors, and streamline operations. Our platforms provide exclusive access to vintage treasures while ensuring transparency and engagement. Built on the powerful **[AuctionWorx](https://www.systenics.com/auctionworx/)** platform, Systenics offers a complete end-to-end solution for antiques and collectibles auctions. Build a premium marketplace for high-value items with our solution. ### Power Your Antiques & Collectibles Auction Marketplace with Systenics * Curated Collections Showcases a curated selection of antiques and collectibles, organized by category, theme, or type. It helps customers easily browse, discover, and explore unique items within specific groups or featured collections. ** Vintage Discussion Board Community space where collectors, enthusiasts, and experts can share knowledge, discuss rare finds, ask questions, and exchange insights about antiques, artifacts, and collectibles. ** Exclusive Discount Coupons Tool that allows businesses to create, manage, and track promotional codes, discounts, and special offers. It helps attract customers, boost sales, and increase customer loyalty by offering personalized or rule-based coupons that can be applied during checkout across web, app, or marketplace channels. ** AI enhanced Listing Description A good product item description is crucial for its sale as well as helps enhance your sites SEO. Our AI enhanced listing description generator tool helps you harness the power of AI to generate unique and SEO focused descriptions for antique listing created every day. Using the photos of the artefacts AI and identify and provide rich details about the item to enhance your listing. ** Accounting System Integration Synchronize financials, track transactions, and automate invoicing through QuickBooks or Xero to ensure smooth and transparent accounting. ** Reverse Logistics Involves initiating return requests, scheduling product pickups, inspecting returned items, and processing refunds or replacements. ** Referral Program Integration Incentivize users to refer others to the platform with a built-in referral system—amplifying user acquisition and platform growth organically. ** [Mobile Apps](https://www.systenics.com/auctionworx/mobile-apps/) for both Buyers and Sellers Mobile apps help increase your buyer reach giving them the ease of being able to bid on items from anywhere. Push notification ensure they are locked in and in the loop to drive up more bids. Sellers can use the mobile apps to quickly make listings on the fly. Click and upload multiple hi-res product photos to make your listings attractive and accurate right from the mobile app saving your team tons of time in creating correct listing. --- ## Page: eCommerce Overstock & Returns Auction Solutions | Systenics URL: https://www.systenics.com/auctionworx/end-to-end-solution-for-auction-of-ecommerce-overstock-box-damaged-and-returned-items/ Description: Turn overstock, box-damaged, and returned items into revenue. Scalable end-to-end auction platforms for eCommerce sellers and liquidators. # End-to-End Solutions for eCommerce Auctions ## Increase sales by 50%. Slash backend costs by 40% [Get Started Now!](#) * Built on the powerful **[AuctionWorx](https://www.systenics.com/auctionworx/)** platform, Systenics offers a complete end-to-end solution for eCommerce auctions. Maximize recovery value for overstock and returned items. Our platform streamlines the auctioning of box-damaged and eCommerce inventory. At Systenics, we have worked with several growing eCommerce clients to refine a set of products that go far beyond managing auctions. Our scalable solutions are designed to grow with your business, whether you are just starting up or an established seller. From warehouse management to customer engagement, we deliver end-to-end platform tailored to your unique needs. ### Key Features to dominate the Digital Shelf * Amazon Product Advertising API Integration Integration using Amazon / Home Depot official API for accessing product details and generating affiliate links programmatically. Save time from manual product searches and create more accurate product listings. ** CRM Integration Connect with popular CRM systems like HubSpot, Zoho, Dynamics 365, or a custom ERP to manage customer profiles, product listings, and engagement history. CRM integration helps you to drive digital campaigns and advertisements to increase reach of your stores. We can build one-way or two way integration with these systems to stop duplication of item content. ** Exclusive Discount Coupons Tool that allows businesses to create, manage, and track promotional codes, discounts, and special offers. It helps attract customers, boost sales, and increase customer loyalty by offering personalized or rule-based coupons that can be applied during checkout across web, app, or marketplace channels. ** AI enhanced Listing Description A good product item description is crucial for its sale as well as helps enhance your sites SEO. Our AI enhanced listing description generator tool helps you harness the power of AI to generate unique and SEO focused descriptions for antique listing created every day. Using the photos of the artefacts AI and identify and provide rich details about the item to enhance your listing. ** Warehouse Management Streamlines daily warehouse operations, improves customer satisfaction, and boosts operational efficiency. It tracks stock location in real time, optimizes picking and packing processes, ensures accurate, on-time deliveries managed through QR codes, and efficiently operates multiple warehouses or fulfilment centers. ** Reverse Logistics Involves initiating return requests, scheduling product pickups, inspecting returned items, and processing refunds or replacements. ** Referral Program Integration Incentivize users to refer others to the platform with a built-in referral system—amplifying user acquisition and platform growth organically. ** [Mobile Apps](https://www.systenics.com/auctionworx/mobile-apps/) for both Buyers and Sellers Mobile apps help increase your buyer reach giving them the ease of being able to bid on items from anywhere. Push notification ensure they are locked in and in the loop to drive up more bids. Sellers can use the mobile apps to quickly make listings on the fly. Click and upload multiple hi-res product photos to make your listings attractive and accurate right from the mobile app saving your team tons of time in creating correct listing. --- ## Page: Estate Sales Auction Software & End-to-End Solutions | Systenics URL: https://www.systenics.com/auctionworx/end-to-end-solution-for-estate-sales-auctions-with-systenics/ Description: Streamline estate liquidation auctions with specialized software. Rapid inventory categorization, integrated valuation tools, and verified buyer networks for estate auctioneers. # End-to-End Solutions for Estate Sales Auctions ## Increase sales by 50% [Get Started Now!](#) * Built on the powerful **[AuctionWorx](https://www.systenics.com/auctionworx/)** platform, Systenics offers a complete end-to-end solution for estate sales. Streamline estate liquidation with rapid inventory processing, integrated valuation tools, and verified buyer networks. Our platform supports bulk inventory uploads, rapid categorization, and automated descriptions that transform weeks of manual work into days of efficient liquidation. From warehouse management to buyer verification and community engagement, we deliver an end-to-end platform tailored to your estate liquidation workflow. ### Key Features for Estate Sales Auctions * Bulk Inventory Upload & Categorization Upload 100+ items at once with AI-powered automatic categorization. Organize furniture, jewelry, [collectibles](https://www.systenics.com/auctionworx/power-your-antiques-collectibles-auction-marketplace-with-systenics/), and more into market-ready listings in minutes. Reduces manual data entry time by up to 75%. ** Integrated Valuation & Appraisal Tools Access real-time market comparables and historical sale data. Reference databases for fine art, furniture, jewelry, and collectibles help you confidently value complex estates and price items competitively. ** AI-Enhanced Listing Descriptions Transform photos and manual notes into SEO-rich, compelling descriptions automatically. Our AI identifies condition, era, materials, and provenance from images, attracting serious buyers and improving search visibility. ** Time-Sensitive Bidding Mechanics Set strategic auction end dates to maintain buyer urgency. Escalating bid notifications and countdown timers drive competitive bidding, typically increasing final hammer prices by 20-40% compared to fixed-price listings. ** Buyer Authentication & Verification Attract and verify serious collectors, dealers, and institutions. Track buyer ratings, payment history, and return patterns. Premium buyer status encourages higher bids and reduces fraud risk. ** Warehouse Management & QR Tracking Track every item from intake through delivery. QR-based inventory management, multi-location support, and automated pick-and-pack workflows reduce errors and accelerate fulfillment. ** Community Discussion Forum Build a community of estate specialists — appraisers, collectors, dealers, and enthusiasts. Enable discussions and expert commentary on listings to drive engagement, build trust, and increase sale prices. ** [Mobile Apps](https://www.systenics.com/auctionworx/mobile-apps/) for Buyers and Sellers List new estates on the go. Buyers bid from anywhere with push notifications for price alerts and countdown timers. Field agents photograph and upload hi-res images directly from estate walks, dramatically reducing admin overhead. --- ## Page: Livestock Auction Software & End-to-End Solutions | Systenics URL: https://www.systenics.com/auctionworx/streamline-livestock-auctions-with-systenics-end-to-end-solutions/ Description: Streamline your livestock auctions with specialized software. We connect breeders and buyers with lineage tracking, GPS search, and live bidding. # End-to-End Solutions for Livestock Auctions ## Increase sales by 50% [Get Started Now!](#) * Built on the powerful **[AuctionWorx](https://www.systenics.com/auctionworx/)** platform, Systenics offers a complete end-to-end solution for livestock auctions. Digitalize livestock auctions with our specialized software. Manage cattle, sheep, and other livestock bidding with real-time updates. Our platforms support live online bidding, rare breed showcases, and robust tools to manage animal lineage and market trends, ensuring a seamless auction experience. ### Key Features for Livestock Auctions * Lineage Tracker (Family Tree) Easily record and view animal lineage with a visual and searchable family tree for smarter breeding decisions. ** Livestock Discussion Board Community space where collectors, enthusiasts, and experts can share knowledge, discuss rare finds, ask questions, and exchange insights about breeds, animals, and livestock. ** Exclusive Discount Coupons Tool that allows businesses to create, manage, and track promotional codes, discounts, and special offers. It helps attract customers, boost sales, and increase customer loyalty by offering personalized or rule-based coupons that can be applied during checkout across web, app, or marketplace channels. ** CRM Integration Connect with popular CRM systems like HubSpot, Zoho, Dynamics 365, or a custom ERP to manage customer profiles, product listings, and engagement history. CRM integration helps you to drive digital campaigns and advertisements to increase reach of your stores. We can build one-way or two way integration with these systems to stop duplication of content. ** AI enhanced Listing Description A good product item description is crucial for its sale as well as helps enhance your sites SEO. Our AI enhanced listing description generator tool helps you harness the power of AI to generate unique and SEO focused descriptions for antique listing created every day. Using the photos of the artefacts AI and identify and provide rich details about the item to enhance your listing. ** Nearby Listings and Locations Find animals or farms close to you with precision-based GPS radius search. ** Stockyard Forum Join the conversation on the Stockyard Forum where ranchers, breeders, and livestock enthusiasts connect, trade advice, and talk market trends. ** Accounting System Integration Synchronize financials, track transactions, and automate invoicing through QuickBooks or Xero to ensure smooth and transparent accounting. **[Mobile Apps](https://www.systenics.com/auctionworx/mobile-apps/) for both Buyers and Sellers Mobile apps help increase your buyer reach giving them the ease of being able to bid on items from anywhere. Push notification ensure they are locked in and in the loop to drive up more bids. Sellers can use the mobile apps to quickly make listings on the fly. Click and upload multiple hi-res product photos to make your listings attractive and accurate right from the mobile app saving your team tons of time in creating correct listing. ** Lead Generation Tool Attract more buyers and sellers to livestock markets by offering tailored tools that generate high-quality leads, streamlining connections and driving market growth. --- ## Page: Own Your Auto Auction Platform | White-Label Car Auction Software | Systenics URL: https://www.systenics.com/auctionworx/end-to-end-solution-for-your-used-rare-or-new-automobile-auctions/ Description: Launch your own branded automobile auction marketplace. Auto Auction Suite gives you full ownership — your domain, your fees, your leads. VIN decoding, damage annotation, live bidding, mobile apps & more. # Run Your Own Online Auto Auction Platform ## Your brand. Your rules. Your profit. Stop paying commissions to third-party marketplaces. Launch a fully branded automobile auction site on our [car auction software](https://www.systenics.com/auctionworx/pricing/), with every tool your buyers and sellers need — from VIN decoding to live bidding. [Get Started Now!](#)[** View Live Demo](https://autoauctionsuite.systenics.com/) * Why Build Your Own Auction Platform? ## Own the Platform. Own the Market. Third-party auction marketplaces lock your sellers into their platform, take a cut of every sale, and keep your buyer data for themselves. Auto Auction Suite puts you in complete control — every listing, lead, and transaction belongs to you. * #### Your Brand, End-to-End Your logo, your domain, your colors — on web and mobile. Buyers associate every bid with your brand, not someone else's marketplace. ** #### You Set the Fees Define your own buyer's premium, seller fees, and commission structure. No percentage skimmed by an intermediary — every dollar goes directly to your business. ** #### Full Control, Zero Limits From auction rules and listing requirements to community moderation and custom data exports — you configure every aspect of the platform your way. ** Your Marketplace Homepage ## A Homepage That Wins Buyers on First Visit ### Live Bids. Featured Listings. Instant Action. Your homepage is your auction floor. A sleek vehicle slider showcases your premier listings front and center, while a **Live Recent Bids** feed tracks the 6 most active auctions in real time — building urgency that drives bidders deeper into your platform. The **Featured Listings** grid gives buyers everything at a glance: high-resolution imagery, current bid, end date, and location. A single **Quick Bid** button lets them place an offer in seconds — no page-by-page hunting required. - **Hero vehicle slider with real-time countdown - **Live Recent Bids feed — admin toggleable (Admin can Toggle) - **Quick Bid from the listing grid - **Fully branded to your business **autoauctionsuite.systenics.com * * Mobile App — Home * *autoauctionsuite.systenics.com/listing/details/... * Vehicle Specifications — auto-populated via VIN decoding * Same experience on mobile — listing detail, Carfax badge & Quick Bid always visible * * Listing Detail Pages ## Every Detail, Built for Confident Bidding ### Transparency That Converts Browsers to Bidders A well-designed listing page reduces hesitation. The top of every listing pins critical info in view — vehicle title, subtitle, current price, live countdown timer, and quick-action buttons for **Watch List** and social sharing — so buyers never scramble for key details. Dedicated **Pricing** and **Seller Information** sections ensure financial details and seller credibility are always front-and-center. Below the fold, a structured vehicle specs table is auto-populated directly from VIN decoding — no manual entry, no guesswork. - **Sticky bid bar with live countdown - **Watchlist + social share buttons - **VIN-decoded specs table — 30+ data fields (customizable) - **Seller profile & pricing section ** VIN Decoding ## One VIN. Every Spec. Zero Manual Entry. ### Accurate Data, Instantly Populated Sellers on other platforms spend precious time filling in each vehicle spec by hand — and buyers pay the price with incomplete or inaccurate listings. Auto Auction Suite eliminates that friction. Enter a VIN and the platform instantly pulls verified specifications from leading data providers:**Carfax**, **DVLA**,**Vehicle Data Global**, and **ChromeData**. Admins can individually enable or disable **any** data provider from the control panel. Sellers can use their own API credentials or rely on the site's shared credentials — giving you the flexibility other platforms simply don't offer. - **Auto-populates Make, Model, Trim, Engine, Transmission & more - **4 provider integrations: Carfax, DVLA, VDG, ChromeData - **Per-provider toggle from admin control panel - **Seller or site-wide API credentials VIN Decoder — Seller View * Admin Control Panel — VIN Provider Settings * VIN Decoding on Mobile — sellers decode from anywhere * Mark Damage — Seller Annotation Tool Damage Inspection — Buyer View with Zoom * Mark & inspect damage on mobile — pin, zoom, review * * Vehicle Damage Annotation ## Vehicle Damage Annotation ### Interactive Inspections That Eliminate Surprises Photos alone can hide defects or create misleading impressions. The **Damage Annotation Tool** lets sellers place precise, categorized pins directly on vehicle images — choosing from **Cracked**,**Dent**, **Scratched**, or **Paint Chip** — mapped with numbered markers and a corresponding legend. Buyers get a **zoom and full-screen viewer** to inspect every marker with clarity before placing a bid. The result: fewer disputes, higher buyer satisfaction, and a level of pre-sale transparency that no third-party listing marketplace currently provides. - **Interactive damage pins on real vehicle photos - **Categorized: Cracked, Dent, Scratched, Paint Chip - **Numbered legend matched to markers - **Buyer zoom + full-screen inspection view ** Vehicle Location & Distance ## Vehicle Location & Distance ### Geographic Search No Marketplace Offers Many buyers prefer to inspect a vehicle in person before committing to a bid. Auto Auction Suite's integrated location tools make that possible. From any listing, buyers can instantly calculate distance and view driving routes between their address and the vehicle's location — powered by Google Maps. On the browse page, a flexible **Radius Filter** narrows results to vehicles within a set distance of any city or zip code. Buyers can use saved addresses, enter a new location manually, or tap **"Get Current Location"** for instant, GPS-accurate results. No other auto auction platform includes this level of geographic discovery built-in. - **Google Maps driving directions from any listing - **Radius filter on browse page (by city or zip) - **Saved addresses + GPS "current location" Get Directions — Google Maps Integration * Radius Filter — Browse Select Location * Full location tools on mobile — radius filter, GPS, Google Maps directions * Marketplace Discussions — Listing View Rich Discussion Comments Vehicle Discussion Hub — User Profile * Community discussions built into the mobile app * * Community Discussions ## A Community That Belongs to You ### Transparent, Engaged, Moderated — On Your Platform The community discussion thread is one of the most powerful trust-building features an auction platform can offer. Auto Auction Suite includes a fully-featured real-time discussion hub on every listing — with **upvote/downvote** voting, threaded replies, and live updates so conversations flow naturally without page refreshes. Your admins can pin **"Top Comments"** to surface expert insights and ensure quality advice is seen first. Users can flag misleading data or abusive behavior with a single click. Every participant builds a**Discussion Impact Score** in their profile — keeping your community engaged and accountable, on *your* platform — not feeding another site's engagement metrics. - **Real-time updates — no page refresh needed - **Upvote/downvote + threaded replies - **Admin-controlled "Top Comment" pinning - **Community Impact Score in user profiles ** Lead Generation ## Capture Sellers Before They List Elsewhere ### Turn Visitors into Consignors — Automatically The built-in **Lead Generation Tool** gives potential sellers a professional, high-converting *"Request a Consultation"* experience directly on your platform. A dual-layout design combines compelling marketing copy on the left with a structured intake form on the right. The form captures everything your team needs upfront: VIN, odometer readings, and **media uploads** including high-resolution photos and even engine audio files. The moment a form is submitted, your team receives an automatic notification — and admins can configure multiple recipient email addresses directly from the control panel. - **Branded "Request a Consultation" page - **VIN, odometer, condition, and media uploads - **Instant email notification to your team - **Multi-recipient email — admin configurable Request a Consultation — Lead Generation Form * * White-Label Mobile Apps ## Bid. Browse. Sell. All From Your Phone.* ### Fully Branded iOS & Android Apps Your Buyers Will Actually Use Most third-party auction platforms don't offer dedicated mobile apps at all. Auto Auction Suite includes fully branded **iOS and Android apps** — your logo, your name, published on the App Store and Google Play. Every screen your buyers and sellers see carries your brand, not ours. ** ##### Live Bidding, On the Go Buyers browse, bid, and watch auctions from anywhere. The app mirrors every real-time update from the web platform — live countdown timers, current bid amounts, and Quick Bid buttons all behave identically on mobile. ** ##### Push Notifications That Drive Bids Outbid alerts, auction ending reminders, and watchlist notifications are pushed directly to the buyer's lock screen. Bidders stay engaged even when they're not actively browsing — keeping auction energy high through to the close. ** ##### Sell & List Directly From Mobile Sellers can photograph a vehicle, decode the VIN, annotate damage, and publish a listing — all without touching a desktop. The full Create Listing flow, including Carfax/DVLA lookup and Mark Damage tool, is available in the app. ** ##### Browse, Filter & Discover Grid and list view, category menus, radius filter, saved recent searches — the full browse experience is built into the mobile app. Buyers can find vehicles near them using GPS and filter by distance, category, price, and status. ** ##### Full Account & Invoicing Buyers and sellers can manage their account, review invoices, track bid history, view purchased lots, and update payment details — all from the app. No need to switch to a desktop for post-auction management. ** ##### Multi-Language & Multi-Currency* The mobile app supports multiple languages — including full Arabic (RTL) support — and displays amounts in your platform's configured currencies. Reach international buyers without friction. [** Explore Mobile Apps in Detail](https://www.systenics.com/auctionworx/mobile-apps/) * * ** Carfax Integration ### Verified History Reports — On Your Platform Buyers trust Carfax. Now that trust works for you. Sellers can link any vehicle's official **Carfax Vehicle History** report directly to their listing — displaying a verified badge and a *"View Report"* button that gives buyers instant access to accident history, service records, and ownership data. The same trust signals buyers expect from the biggest marketplaces — now featured on your branded platform, driving confidence without sending traffic elsewhere. * Carfax Report Available * ** Mobile Apps ### White-Label iOS & Android Apps While most third-party auction marketplaces offer no dedicated mobile experience, Auto Auction Suite ships with fully white-labeled **iOS and Android apps** — your name, your logo, published on the App Store and Google Play under your brand. Buyers receive **push notifications** for outbid alerts, auction ending reminders, and daily watchlist summaries — keeping them engaged even when the app is closed. Sellers can photograph vehicles, run a VIN decode, annotate damage, and go live with a listing without ever touching a desktop. ** Outbid push alerts ** Mobile listing creation ** In-app VIN decoder ** GPS radius search ** Invoices & bid history ** Multi-language & RTL * Consultation Vehicle Details Media Upload [* Explore Mobile Apps](https://www.systenics.com/auctionworx/mobile-apps/) ## Everything to Run a World-Class Auction ### Enterprise-Grade Tools, Built Into Every Licence Beyond the headline features, Auto Auction Suite ships with a full stack of business-critical capabilities — no extra modules, no add-on fees. ** ##### Automated VIN Decoding Instantly pull verified specifications from Carfax, DVLA, VDG, and ChromeData. Eliminate manual entry errors and provide buyers with accurate vehicle data automatically. [View Demo **](#) ** ##### Interactive Damage Annotation Let sellers place precise, categorized pins on vehicle photos. Interactive inspection tools with zoom allow buyers to see every defect before they place a bid. [View Demo **](#) ** ##### Nearby Vehicle Discovery Integrated Google Maps and radius filters help buyers find auctions close to home. GPS-accurate search makes local inspection and pickup easy for your users. [View Demo **](#) ** ##### Community Discussion Hub Build trust with real-time threaded comments on every listing. Features include upvote/downvote, admin pinning, and community impact scores for better engagement. [View Demo **](#) ** ##### Branded Lead Generation Capture potential sellers with professional consultation forms. Automatically collect VIN, condition data, and high-res media to grow your inventory pipeline. [View Demo **](#) ** ##### White-Label Mobile Apps Your own branded iOS and Android apps published on official stores. Drive engagement with push notifications for outbid alerts and real-time auction updates. ** Platform Comparison ## Why Build Your Own vs. List on Someone Else's? Third-party auction marketplaces take a cut of every sale and own your buyers. Auto Auction Suite gives you the same powerful features — on your own platform, under your own brand. Feature Other Platforms Third-Party Marketplaces **Auto Auction Suite Your Own Platform **Platform Ownership & Branding Own your domain & brand identity ** ** White-label mobile app (iOS & Android) ** ** Set your own buyer's premium & seller fees ** ** All seller leads go to you ** ** Keep your buyer data & email list ** ** **Listing Tools & Discovery High-res photo galleries ** ** Carfax / vehicle history report integration ** ** **VIN decoding — auto-populates all specs ** ** **Interactive damage annotation with zoom viewer ** ** **Location-based search with radius filter ** ** AI-generated listing descriptions ** ** **Bidding & Auction Management Online timed auctions ** ** Anti-sniping / bid extension timer ** ** Watchlist with outbid notifications ** ** Reserve & no-reserve support ** ** Quick Bid from listings grid ** ** **Community Tools Per-listing buyer/seller discussions ** ** Upvote / downvote comments ** ** Admin-pinned "Top Comments" ** ** Community Discussion Impact Score ** ** Dedicated automotive marketplace forum ** ** **Business Operations & Integrations Seller lead generation tool ** ** Admin control panel & configuration ** ** **Mobile Experience Mobile-responsive web interface ** ** **Dedicated iOS & Android apps (your branding) ** ** Push notifications for bids & auctions ** ** Mobile listing creation (photos + upload) ** ** ** Included ** Not Available ** Auto Auction Suite Exclusive ## Frequently Asked Questions ### Marketplaces rent you their audience and keep the buyer relationship. This is your own branded auto auction platform — your domain, your fees, your bidder list, with VIN decoding, damage annotation and live bidding built in. ### Yes — registration can be gated to verified dealers, with public, dealer-only or hybrid auction lanes on the same platform. ### A branded platform on AuctionWorx typically launches in weeks, not months — the auction engine exists; we configure, customize and deploy it for your business. ## Ready to Launch Your Own Auto Auction Platform? Stop building your competitor's audience. Auto Auction Suite gives you a complete, white-label automobile auction platform — every feature included, fully branded to you from day one. [** Explore the Live Demo](https://autoauctionsuite.systenics.com/)[** Book a Consultation](#) --- ## Page: Real Estate Auction Software & Platform Development | Systenics URL: https://www.systenics.com/auctionworx/power-your-property-auctions-with-systenics-innovative-end-to-end-solutions/ Description: Launch a branded real estate auction platform — foreclosures, land, luxury and off-market property. White-label software with escrow-ready workflows, from a RainWorx Premium Partner. # Real Estate Auction Software, Built for Your Brand ## Run foreclosure, land and luxury-property auctions on a platform you own — your domain, your fees, your buyer list. [Get Started Now!](#) * Built on the powerful **[AuctionWorx](https://www.systenics.com/auctionworx/)** platform, Systenics builds complete **real estate auction software** for property and real estate auctions. Transform your business with a white-label **property auction platform** you own outright. Streamline real estate listings, bidding, and closing processes effectively. Systenics builds secure, user-friendly platforms to connect buyers and sellers, ensuring trust and efficiency. Our solutions streamline the auction process, from buyer verification to escrow management, helping you unlock the full potential of property markets. ### Essential Features for Property Auctions Success: * Buyer Verification Ensure secure registration by verifying name, email, and credit card details. This helps prevent fraud and builds trust with genuine buyers. ** Escrow & Deposits Safely manage deposits and escrow funds during transactions. Protect both buyers and sellers while ensuring a smooth auction process. 3rd party Escrow services are perfect for large value property transactions. Take a pre-auction deposit ensures that only genuine buyers participate in the auction process. ** CRM Integration Connect with popular CRM systems like HubSpot, Zoho, Dynamics 365, or a custom ERP to manage customer profiles, product listings, and engagement history. CRM integration helps you to drive digital campaigns and advertisements to increase reach of your stores. We can build one-way or two way integration with these systems to stop duplication of content. ** Accounting System Integration Synchronize financials, track transactions, and automate invoicing through QuickBooks or Xero to ensure smooth and transparent accounting. ** Lead Generation Tool Attract more buyers and sellers to [livestock](https://www.systenics.com/auctionworx/streamline-livestock-auctions-with-systenics-end-to-end-solutions/) markets by offering tailored tools that generate high-quality leads, streamlining connections and driving market growth. ** Nearby Listings & Location Search Easily discover homes near you using Google Maps-powered radius search. Find the perfect property in your preferred area with pinpoint accuracy. Automate Backend Workflows Property purchase involves a lot of paperwork, our solutions helps you automate your workflow so that sales are not stuck in tedious paperwork and the process can flow as smoothly as possible. Our end to end tools help you extend the full life cyle of a property sale. ** AI Enhanced Listing Description A good product item description is crucial for its sale as well as helps enhance your sites SEO. Our AI enhanced listing description generator tool helps you harness the power of AI to generate unique and SEO focused descriptions for antique listing created every day. Using the photos of the artefacts AI and identify and provide rich details about the item to enhance your listing. ** Online/Offline Live Property Auction Bid online or on-site, with live broadcasts with an Auctioneer. Buyers can participate from anywhere in the world through live online bidding or attend the physical auction site. ** [Mobile Apps](https://www.systenics.com/auctionworx/mobile-apps/) for both Buyers and Sellers Mobile apps help increase your buyer reach giving them the ease of being able to bid on items from anywhere. Push notification ensure they are locked in and in the loop to drive up more bids. Sellers can use the mobile apps to quickly make listings on the fly. Click and upload multiple hi-res product photos to make your listings attractive and accurate right from the mobile app saving your team tons of time in creating correct listing. ** Bulk Listing Creation in Excel Our Excel Plug-in allows your backend team to create listing in bulk on AuctionWorx. Collect data from various sources in a simple to manage Excel sheet and directly upload 1000's for items and their respective images. ## Frequently Asked Questions ### Yes — auction formats, deposit requirements and disclosure documents are configurable per listing, so foreclosure, trustee and traditional sales can run side by side. ### You decide. The platform supports deposit holds, document-gated registration and manual bidder approval for high-value property auctions. ### Your own. White-labeled on your domain with your branding, your commission structure and your customer data — we build and deploy it, you own it. --- ## Page: Why the Cheapest AuctionWorx Developer Costs the Most URL: https://www.systenics.com/blogs/why-the-cheapest-auctionworx-developer-costs-the-most/ Description: Understanding the hidden costs of cheap AuctionWorx customizations, and why platform expertise is critical for business continuity and long-term success. # Why the Cheapest AuctionWorx Developer Costs the Most **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/), [*Development*](https://www.systenics.com/blogs/tag/development/), [*Customization*](https://www.systenics.com/blogs/tag/customization/) Every few months, we get a call that starts the same way. "We hired someone to customize our [AuctionWorx](https://www.systenics.com/auctionworx/) site six months ago. It was affordable — under thousand dollars. But now nothing works. Incomplete customizations, broken features, unstable sites, undocumented features. Our latest changes have been throwing errors for three weeks, and the developer stopped responding." We call these "rescue missions." And over 15+ years of hands-on AuctionWorx experience, we've handled enough of them to spot a pattern. The cheapest developer almost always costs the most — you just don't see the bill until months later. This isn't about convincing you to spend more than you need to. It's about understanding where the real costs hide when you choose a developer based on price alone, and why AuctionWorx — a platform we've specialized in for over a decade — is particularly unforgiving when corners get cut. ## The Real Cost of "Affordable" AuctionWorx [Customization](https://www.systenics.com/auctionworx/development-and-customization/) Let's look at what actually happens when an AuctionWorx customization goes wrong. These aren't hypothetical scenarios. They're pulled from projects our Superhero Squad has stepped in to fix. ### The $750 UI Redesign That Broke the Bidding Engine A client hired the lowest freelancer on upwork to redesign their AuctionWorx theme. The rate was cheap, the portfolio looked decent, and the work was delivered in three weeks. The mockups looked great, the actual site implementation - not so much. What they didn't know: the developer had directly modified core AuctionWorx view files instead of working through the platform's theming system. The theme appeared partially, every few days they kepy finding new pages which were not styled right. Eventually, the developer stopped responding since the scope of work far increased the time he had estiamted. The client lost weeks of auction revenue before anyone noticed. Fixing it required our [AuctionWorx development team](https://www.systenics.com/auctionworx/development-and-customization/) to rebuild the customizations properly on the updated platform. Total cost: more than four times the original $750 — plus the revenue lost during downtime. ### The Migration That Took Down the Database Another client needed to migrate their AuctionWorx 3.5 installation 3.6. The developer they found quoted a flat $800 for the migration — significantly lower than our scoped estimate. The migration never compeleted, because the developer failed to access all the customizations made to the system. The client didnt document the customizations made to the system, the developer didnt discover them before. Midway through the migration, the developer ran into issues and the scope increased. The developer disappeared with a broken half migration. Our team spent the next 48 hours recovering the database, indexing the undocumented customizations and fixing the migration issues. The emergency fix cost more than what an experienced developer would have charged to do the deployment right the first time. ### It started good, but over time it went south We also get clients who come to us after 3 to 6 months of working with the cheapest developer. They start with small customizations. The developer is able to do them and the client is happy. Over time, the client comes up with more customizations. The developer is still able to do them. But slowly the quality of work starts to decline. Our clients typically reach out when the customizations start failing, the performance of the site deteriorates or they realize the developer is not able to handle complex customizations. When we take over the project, we discover that the initial simple customizations were done right but over time the developer started taking shortcuts. In the end, the client pays more to fix the mess than what it would have costed to hire the right developer in the first place. ## Where the Cheap Developer Model Breaks Down AuctionWorx isn't a WordPress site. It's a .NET MVC application with deep integration points, multi-tenant seller logic, real-time bidding infrastructure, and a payment processing pipeline that handles actual money. Cut corners here, and you're not risking a broken contact form — you're risking auction integrity. Years of platform-specific experience matter in ways that general .NET development cannot substitute. Here's where low-cost developers consistently fall short. ### Platform Architecture Knowledge AuctionWorx has been evolving for over two decades. Version 3.5 introduced significant API changes. Version 3.6 overhauled the payment pipeline. The Events Edition has its own extension architecture. A developer who treats AuctionWorx like a generic ASP.NET application — which is what most budget developers do — will modify the wrong files, break upgrade paths, and introduce conflicts that surface weeks or months later. Our team has been working with AuctionWorx since well before these modern versions existed. We know which files to touch, which to extend through the platform's own APIs, and how to ensure your customizations survive upgrades. That knowledge isn't a line item on an invoice — but its absence is. ### Bidding Infrastructure at Scale Most AuctionWorx customization looks fine on a development server with five test users. The problems appear when 200 people are bidding simultaneously on a lot closing in sixty seconds. Real-time bidding under load requires understanding SignalR connection management, database locking strategies during bid resolution, and how AuctionWorx's event pipeline processes concurrent requests. Get any of this wrong, and you get the nightmare scenario: the bidder who clicked first doesn't win, and the audit trail shows it. We've tuned bidding infrastructure for platforms handling thousands of concurrent users. Our [AuctionWorx Live Auctions](https://www.systenics.com/auctionworx/live-auctions/) product alone required months of latency optimization to support real-time video alongside sub-second bid processing. You can't bolt that expertise onto a fixed-price customization project. ### Security and PCI Compliance AuctionWorx platforms process payments. That means PCI compliance, secure credit card handling, and proper encryption — not just on the checkout page, but throughout the platform's data layer. We've inherited projects where developers stored partial card data in custom database tables they'd added to the AuctionWorx schema. They didn't realize the platform already had a tokenized payment storage system. The client faced a compliance audit six months later with no idea this data existed in their environment. As [Microsoft Gold Cloud Platform partners](https://www.systenics.com/about-us/), our deployments follow Azure's security best practices by default. Your platform runs in an environment designed for enterprise workloads, not a generic VPS with default firewall rules. ### The Upgrade Dead End This is the cost that catches up with every cheap customization eventually. RainWorx releases updates regularly — security patches, new features, API improvements, .NET framework upgrades. If your customizations modified core files instead of extending through supported APIs, every upgrade becomes a breaking change. You now have two options: skip updates and run an increasingly vulnerable platform, or pay someone to rebuild the customizations properly. Either way, the savings from the original cheap project evaporate — and the rebuild usually costs more than doing it right the first time because someone has to untangle the mess before they can fix it. ## Why Experience Changes the Economics A developer who's done ten AuctionWorx projects has already made the mistakes. A developer doing their first one will make them on your platform, with your revenue at stake. We're not being dramatic. AuctionWorx is a sophisticated platform with edge cases that only reveal themselves in production — under load, during payment processing, across different seller configurations, through upgrade cycles. The difference between an expert AuctionWorx specialist with a decade of deployment experience and a general .NET developer isn't talent. It's scar tissue. We know what breaks because we've already broken it, fixed it, and built products to prevent it from breaking again — across enterprise platforms handling thousands of concurrent bidders. That's also why we've invested in building our own [AuctionWorx add-on products](https://www.systenics.com/products/) — [mobile apps](https://www.systenics.com/auctionworx/mobile-apps/), warehouse management, live auction streaming, Excel listing tools, and AI-powered description generation. Each product was born from a client need that a simple customization couldn't solve. Instead of building a one-off fix, we built a reusable solution. Today, those products give our clients capabilities that no freelancer — and frankly, no other AuctionWorx developer — can offer. If you're evaluating development partners, our [AuctionWorx platform team](https://www.systenics.com/auctionworx/) can walk you through what each product does and whether it fits your roadmap. ## How to Evaluate an AuctionWorx Developer (Without Focusing on Price) If you're comparing developers right now, here are five questions that reveal more than a price quote ever will: **1. "Show me an AuctionWorx platform you've customized that's been running for more than two years."** A portfolio of freshly-built sites tells you nothing about longevity. You want to see platforms that have survived multiple AuctionWorx version upgrades. Ask what version they started on and what version they're running now. If they can't answer, they probably modified core files — and their clients are sitting on ticking upgrade bombs. **2. "What does your development lifecycle look like?"** Are the changes properly documented? Are they tested? Are there any development standards followed? Do they provide you with a proper test enviorment to ensure through testing of all new feautres before deployment to production? Do they have a strategy to to manage changes during future updates or upgrades of AuctionWorx? Does the developer have the expertise to handle complex scenarios and edge cases? **3. "Have you developed complex AuctionWorx customizations?"** As your auctions business grows, so does the complexity of your requirements. A developer who can handle simple customizations might not be equipped to handle complex ones. Most of our clients have been with us for more than 5 years. Not everyone customizes at one go. Some of them start with simple customizations and then slowly scale up as their business grows. This is possible only when the developer has the expertise to handle complex scenarios and edge cases. It needs deep thiniking and understanding of the platform. Your platform will evolve with your business. A partner who's invested in your long-term success is worth more than a cheap hourly rate. So many times we get clients who have done cheap customization but they have not been implemented correctly and dont scale or work. They end up paying us again to redo them correctly. Integrations with external systems like crm, accounting, ERP, WMS etc are common. Automating backend processes is common. AI based features are becoming common. All these need deep understanding of the platform. Can your choosen developer handle these ? **4. "What happens when I need something beyond customization?"** Most developers can customize AuctionWorx. Almost none can build you a white-label mobile app for iOS and Android. Or a complete warehouse management system that integrates with your auction platform. Or a live streaming solution with an auctioneer dashboard. When you work with a developer who only does customization, every new requirement becomes a new vendor search. Our [AuctionWorx mobile apps](https://www.systenics.com/auctionworx/mobile-apps/), [warehouse management system](https://www.systenics.com/auctionworx/warehouse-management/), and [live auctions platform](https://www.systenics.com/auctionworx/live-auctions/) exist because our clients needed capabilities that went beyond what customization alone could deliver. **5. "Does RainWorx know who you are?"** This one sounds like a gatekeeping question, but it matters. We're the partner most referred by RainWorx for enterprise customization and migration work. That relationship didn't come from a certification program — it came from a decade of delivering projects that made their platform look good. When RainWorx releases a new version, we get early access. When they're planning API changes, we're in the loop. When their enterprise clients need custom work, they send them to us. That relationship directly benefits every client on our roster. ## The Math That Matters Here's the real comparison. A budget AuctionWorx customization might cost you $750 to $3,000 upfront. A properly scoped engagement with a specialist might run $5,000 to $15,000. If the budget version works perfectly for two years, survives every upgrade, handles your peak traffic, and never creates a security or compliance issue — you saved money. We haven't seen that happen yet, but it's theoretically possible. What we actually see: the budget customization costs $1,500 upfront, then $4,000 to fix broken upgrades a year later, then $6,000 to rebuild it properly when the platform grows beyond what the original developer designed for. Plus the revenue lost during downtime, the bidders who don't come back after a failed auction, and the months of anxiety wondering what else is going to break. The specialist engagement costs more upfront and less over three years. It also comes with something the budget option never includes: the confidence that your platform will still work tomorrow at 2 PM when a hundred bidders are fighting over a closing lot. That's not a cost question anymore. That's a business continuity question. We've been [developing and customizing AuctionWorx](https://www.systenics.com/auctionworx/development-and-customization/) for over ten years. We've built products on top of it that no other developer offers. We're the partner RainWorx trusts with their enterprise referrals. And we've rescued enough failed budget projects to know exactly what the cheapest developer actually costs. If you're building on AuctionWorx — or fixing something that broke — let's talk before you spend twice. ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) - [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Why High-Performing SMBs Choose a Dedicated .NET Development Squad Over Freelance Chaos URL: https://www.systenics.com/blogs/why-smbs-choose-dedicated-dotnet-development-squad/ Description: Discover how growing businesses scale engineering velocity with a dedicated, fully managed .NET Extended Development Center without domestic hiring overhead or freelance date slips. # Why High-Performing SMBs Choose a Dedicated .NET Development Squad Over Freelance Chaos **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*.NET*](https://www.systenics.com/blogs/tag/net/), [*Dedicated Teams*](https://www.systenics.com/blogs/tag/dedicated-teams/), [*Software Architecture*](https://www.systenics.com/blogs/tag/software-architecture/), [*SMB Growth*](https://www.systenics.com/blogs/tag/smb-growth/) For a growing small or mid-sized business, software development is rarely just about writing code. It is about speed to market, architectural integrity, and the survival of your core business roadmap. Yet when CTOs, product managers, and founders set out to scale their engineering capacity, they frequently find themselves caught between two equally frustrating extremes: - **The Prohibitive Domestic Hiring Cycle:** Spending 3 to 6 months recruiting local senior .NET engineers, paying $140k to $180k+ salaries plus hefty benefits and recruitment commissions, only to repeat the process when developers jump ship eighteen months later. - **The Freelance Roulette:** Assembling ad-hoc contractors from freelance portals who work without cohesive architecture, juggle multiple client gigs, and suddenly disappear when project complexity escalates. There is a third, proven path that high-performing SMBs rely on to launch on time and on budget: **The Dedicated Development Squad (Extended Development Center)**. ## The Hidden Friction of Piecemeal Freelancing Freelancers are fine for a quick one-off script. But when you are building mission-critical enterprise platforms on .NET and Microsoft Azure, the hidden costs of disconnected contract talent pile up fast: - **Zero Collective Ownership:** A freelancer is incentivized to close their individual ticket and log billable hours. Nobody is looking at the macro architecture, long-term database query performance, or enterprise security posture. - **The Communication Disconnect:** Without seasoned squad leaders who understand business domain language (from warehouse logistics to complex auction mechanics), requirements get lost in translation. - **Date Slips and Disappearing Acts:** When unexpected technical roadblocks arise midway through a sprint, unmanaged contractors often stall or walk away, leaving behind undocumented code that your team has to pay someone else to untangle. ## What is a Dedicated Development Squad? At Systenics, our [Dedicated Development Squad](https://www.systenics.com/solutions/) model is a direct, high-velocity extension of your core organization. Instead of managing individual developers, you engage a battle-tested, fully equipped engineering squad: - **Senior .NET & Azure Engineers:** Certified developers with deep expertise in ASP.NET Core, modern C#, microservices, and cloud infrastructure. - **Leadership Under a Microsoft MVP:** Led by our CEO (a 4-time consecutive Microsoft MVP and technical author on .NET technologies), ensuring every line of code follows gold-standard architectural patterns. - **Managed DevOps & QA:** Automated CI/CD pipelines in Azure DevOps or GitHub Actions, unit testing, and continuous code quality audits baked into every sprint. ## How Our Squad Delivers: The 4-Stage Mission Process We treat every client engagement as a critical mission with a singular mandate: **100% Mission Success**. We achieve this through our fine-tuned 4-stage delivery process: #### Stage 1: Astute Discovery & Planning We listen first. Our Squad leaders analyze your business objectives, operational workflows, and budget boundaries to construct a crystal-clear roadmap before any code is written. #### Stage 2: Architecture & Prototype Design We map database schemas, interface mockups, and cloud topologies. Clients receive full visibility into how the platform will operate and scale. #### Stage 3: Agile Iterative Engineering Sprint demos, continuous integration, and transparent status tracking. You see real, working software delivered in two-week milestones with zero surprise scope creep. #### Stage 4: Mission Launch & Scaling Flawless production deployment on Microsoft Azure, comprehensive documentation, and proactive ongoing support as your user base expands. ## Why SMBs Trust Systenics for Long-Term Engineering Our relationship with clients does not end with a single delivery. We become your dedicated technical superpower from concept all the way to exit: - **Fixed-Cost Predictability:** No surprise invoices. We establish clear milestone pricing so you know your exact investment before work commences. - **Deep Domain Expertise:** Beyond general software, we bring 15+ years of specialized experience in high-concurrency auction marketplaces, warehouse logistics, and AI document automation. - **Honesty and Complete Transparency:** You have direct access to your squad leaders, full visibility into source code repositories, and weekly video syncs. ## Scale Your Engineering Capacity with 100% Confidence Stop letting developer shortages or unreliable freelancers slow down your product roadmap. Partner with a dedicated Superhero Squad that treats your business goals as its own mission. [Connect for Mission Launch **](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Related pages on Systenics - [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/) - [About Systenics](https://www.systenics.com/about-us/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Why Hire an Expert Tech Agency for Your Product Idea URL: https://www.systenics.com/blogs/why-hire-an-expert-tech-agency-for-your-product-idea/ Description: Why Hire an Expert Tech Agency for Your Product Idea to get to market faster # Why Hire an Expert Tech Agency for Your Product Idea **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*marketing*](https://www.systenics.com/blogs/tag/marketing/) In today's fast-paced digital landscape, turning your innovative product idea into reality requires more than just a vision—it demands technical expertise, industry knowledge, and a team of skilled professionals. This is where hiring an expert tech agency can make all the difference. Whether you're a startup founder, an established business looking to innovate, or an entrepreneur with a groundbreaking concept, partnering with a specialized agency can be the key to bringing your product to life successfully. In this comprehensive guide, we'll explore the numerous benefits of collaborating with [Systenics](https://www.systenics.com/about-us/) and why it might be the best decision for your product's future. ## The Complexity of Modern Software Development In recent years, the landscape of software development has become increasingly complex. From [mobile apps](https://www.systenics.com/auctionworx/mobile-apps/) to web platforms, enterprise solutions to IoT devices, the technical requirements for building successful products have grown exponentially. This complexity stems from several factors: - **Diverse technology stacks**: Modern applications often require a mix of front-end, back-end, and database technologies. - **Integration challenges**: Products need to seamlessly integrate with various third-party services and APIs. - **Cross-platform compatibility**: Ensuring your product works across different devices and operating systems is crucial. - **User experience expectations**: Today's users demand intuitive, responsive, and feature-rich interfaces. - **Security concerns**: With cyber threats on the rise, robust security measures are non-negotiable. Navigating this intricate landscape requires a deep understanding of various technologies and best practices. Systenics brings this knowledge to the table, ensuring that your product is built on a solid foundation from the start. ## Access to a Diverse Pool of Talent One of the most significant advantages of hiring a tech agency like Systenics is gaining access to a diverse team of specialists. While building an in-house team can be time-consuming and expensive, Systenics provides immediate access to: - **Full-stack developers**: Proficient in both front-end and back-end technologies. - **UX/UI designers**: Experts in creating intuitive and visually appealing interfaces. - **Project managers**: Skilled in coordinating complex projects and ensuring timely delivery. - **Quality assurance specialists**: Dedicated to thorough testing and bug-free products. - **DevOps engineers**: Specialists in streamlining development processes and ensuring smooth deployments. - **Data scientists and AI experts**: For products requiring advanced analytics or machine learning capabilities. This diverse skill set allows agencies to tackle multifaceted projects efficiently. Moreover, Systenics has experience across various industries, bringing valuable insights and best practices to your project. ## Cost-Effectiveness in the Long Run While the initial cost of hiring an agency might seem higher than building an in-house team, it's often more cost-effective in the long run. Here's why: - **No recruitment costs**: You avoid the expenses associated with hiring and onboarding new employees. - **Reduced overhead**: You don't need to invest in office space, equipment, or software licenses for additional team members. - **Flexible scaling**: You can easily scale the team up or down based on project needs without the complexities of hiring or layoffs. - **Efficient resource allocation**: We can allocate resources optimally, ensuring you only pay for the skills you need when you need them. - **Reduced training costs**: Our teams stay updated with the latest technologies, eliminating the need for ongoing training expenses. By partnering with Systenics, you transform fixed costs into variable ones, allowing for better budget management and resource allocation. ## Faster Time-to-Market In the competitive tech industry, speed to market can be a crucial factor in a product's success. Systenics is well-equipped to accelerate your development process: - **Established workflows**: We have refined processes that allow for efficient development and quick iteration. - **Ready-to-go infrastructure**: We have pre-configured development environments and tools, eliminating setup time. - **Parallel development**: With larger teams, we can work on multiple components simultaneously. - **Experience with rapid prototyping**: Systenics excels at creating MVPs (Minimum Viable Products) quickly to validate ideas. - **Agile methodologies**: We employ agile practices, ensuring flexibility and faster delivery of working features. This acceleration can give you a significant competitive advantage, allowing you to capture market share and start generating revenue sooner. ## Scalability and Flexibility As your product grows and evolves, your technical needs will change. Systenics offers the scalability and flexibility to adapt to these changing requirements: - **Easy team expansion**: We can quickly bring in additional experts as your project scope expands. - **Technology pivots**: If you need to switch technologies or add new features, we have the diverse skill set to accommodate these changes. - **Handling peak loads**: During intense development phases, we can allocate more resources to meet deadlines. - **Long-term scalability planning**: Systenics builds products with future growth in mind, ensuring your architecture can handle increased user loads. This flexibility allows you to respond rapidly to market feedback and evolving business needs without the constraints of a fixed in-house team. ## Focus on Your Core Business Developing a technical product requires significant time and energy. By outsourcing this to Systenics, you and your team can focus on what you do best: - **Business strategy**: Concentrate on refining your business model and go-to-market strategy. - **Market research**: Dedicate more time to understanding your target audience and their needs. - **Fundraising**: For startups, focus on securing investment without the distraction of technical challenges. - **Customer relationships**: Build and nurture relationships with early adopters and key clients. - **Product vision**: Spend more time on the overall product vision and roadmap. This division of labor allows you to leverage your strengths while leaving the technical execution to experts, potentially leading to a more well-rounded and successful product launch. ## Reduced Risk and Increased Security Building a software product comes with inherent risks, from technical failures to security vulnerabilities. Systenics can help mitigate these risks: - **Best practices implementation**: We follow industry-standard security practices and coding standards. - **Regular security audits**: We conduct routine security checks to identify and address vulnerabilities. - **Compliance expertise**: For products in regulated industries, we have experience ensuring compliance with relevant standards (e.g., GDPR, HIPAA). - **Disaster recovery planning**: We implement robust backup and recovery systems to protect your data. - **Code quality assurance**: We have code review processes in place to maintain high-quality, secure code. By leveraging our expertise, you significantly reduce the risk of costly security breaches or technical debt that could hamper your product's success. ## Staying Ahead with Cutting-Edge Technologies The tech world evolves rapidly, with new tools, frameworks, and methodologies emerging constantly. Staying current can be challenging for in-house teams, but it's a core competency for Systenics: - **Continuous learning**: Our teams are required to stay updated with the latest technologies as part of their job. - **Diverse project experience**: Working on various projects exposes our teams to a wide range of technologies and approaches. - **Innovation focus**: We have dedicated R&D teams exploring emerging technologies. - **Industry connections**: We have partnerships with technology providers, giving them early access to new tools and platforms. This commitment to staying current ensures that your product is built using the most appropriate and efficient technologies available. ## Quality Assurance and Testing Quality is paramount in software development. A buggy or unreliable product can quickly lose users and damage your reputation. Systenics prioritizes quality assurance: - **Dedicated QA teams**: We have specialized quality assurance professionals. - **Comprehensive testing strategies**: From unit tests to end-to-end testing, we implement thorough testing processes. - **Automated testing**: We use automated testing tools to catch issues early and ensure consistent quality. - **User acceptance testing**: We help organize and conduct UAT to gather valuable user feedback. - **Performance testing**: Ensuring your product can handle expected user loads is a standard part of our workflows. This focus on quality results in a more stable, reliable product that's ready to face the demands of real-world usage. ## Post-Launch Support and Maintenance Launching your product is just the beginning. Ongoing support and maintenance are crucial for long-term success. Systenics offers valuable post-launch services: - **Bug fixes and updates**: Quickly address issues that arise after launch. - **Feature enhancements**: Continuously improve your product based on user feedback and market demands. - **Performance optimization**: Monitor and optimize your product's performance as it scales. - **Security updates**: Keep your product protected against evolving security threats. - **24/7 support**: We offer round-the-clock support to handle critical issues. This ongoing support ensures that your product remains competitive and continues to meet user needs long after its initial release. ## Building a Long-Term Technology Partner When you hire Systenics, you're not just getting a one-time service provider; you're potentially gaining a long-term technology partner: - **Strategic technology consulting**: We provide ongoing advice on technology trends and opportunities. - **Seamless knowledge transfer**: As your product evolves, we efficiently onboard new team members or transfer knowledge to your in-house team. - **Consistent support**: Having a long-term partner ensures consistent support and understanding of your product's history and vision. - **Aligned incentives**: We are motivated to deliver high-quality work to secure long-term partnerships. This long-term relationship can be invaluable as you navigate the challenges of growing and evolving your product in a competitive market. ## Conclusion: Empowering Your Vision with Expert Support In the complex world of software development, turning a product idea into a successful reality requires more than just ambition—it demands technical expertise, industry knowledge, and a dedicated team of professionals. Hiring Systenics provides you with all these elements, along with the flexibility, scalability, and cost-effectiveness that can be crucial for your product's success. From accelerating your time-to-market and ensuring top-notch quality to providing ongoing support and staying ahead of technological trends, Systenics can be the catalyst that transforms your vision into a market-leading product. By choosing to partner with experts, you're not just building a product; you're investing in a foundation for long-term success and growth. As you embark on your product development journey, consider the immense value that Systenics can bring to your project. With the right partner by your side, you'll be well-equipped to navigate the challenges of the tech industry and bring your innovative ideas to life. Your next big success story could be just one partnership away. [Connect with us](#) today to embark on a new partnership with Systenics. ## Related pages on Systenics - [AuctionWorx products](https://www.systenics.com/products/) - [About Systenics](https://www.systenics.com/about-us/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Unleashing Growth: Why Your Auction Business Needs a Mobile App URL: https://www.systenics.com/blogs/why-an-auctionworx-mobile-app-is-essential-for-growth/ Description: Discover the real-world benefits of purchasing the AuctionWorx Mobile App, backed by data showing skyrocketing user engagement, strong conversion rates, and expanded global reach. # Unleashing Growth: Why Your Auction Business Needs a Mobile App **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/), [*Mobile App*](https://www.systenics.com/blogs/tag/mobile-app/), [*Analytics*](https://www.systenics.com/blogs/tag/analytics/) The shift toward mobile commerce is undeniable, and the auction industry is no exception. Today’s buyers expect seamless, on-the-go access to their favorite auctions. At Systenics Solutions, our Superhero Squad has developed the [AuctionWorx Mobile App](https://www.systenics.com/auctionworx/mobile-apps/) to provide exactly that. But how does a mobile app actually impact your bottom line? Let's take a look at aggregated, anonymized trends and real-world metrics from our client missions to see why launching the [AuctionWorx](https://www.systenics.com/auctionworx/) Mobile App is a highly beneficial step for your auction business. ## Trend 1: Skyrocketing User Engagement A [mobile app](https://www.systenics.com/auctionworx/mobile-apps/) creates a dedicated space for your auctions on a user's most personal device. This direct access translates to significantly higher engagement compared to traditional web browsing. In recent data analysis across our client base, we've observed exceptional engagement. While mid-sized regional platforms see a robust average engagement time of **23 to 32 minutes** per active user with **5 to 8 engaged sessions** over a 30-day period, highly active platforms experience skyrocketing engagement. For instance, users of a prominent machinery and farm equipment auction platform and a high-volume consumer goods marketplace average **1 hour 22 minutes** and **1 hour 28 minutes** of active engagement respectively, with **12 to 16 engaged sessions** per user. At the top end, active users of an enterprise-scale consumer liquidation marketplace spend an astounding **2 hours and 2 minutes** of monthly engagement across **20 distinct engaged sessions**. This means users aren't just downloading the app and forgetting it; they are actively returning to browse lots, monitor [live auctions](https://www.systenics.com/auctionworx/live-auctions/), and place bids repeatedly. High engagement directly correlates to more competitive bidding and higher final sale prices. ## Trend 2: Exceptional App Store Conversion Rates Launching a mobile app opens up new acquisition channels through the Apple App Store and Google Play Store. It also serves as a powerful retention tool. While standard e-commerce websites struggle with typical conversion rates of 1% to 3%, our clients' iOS App Store listings show incredibly high conversion rates. Analytics show strong performance: regional liquidators and consumer marketplace apps enjoy conversion rates in the **11% to 14% range**, while an automotive salvage specialist sits at **13.3%**. High-performing platforms fly past this: a specialized exotic auction platform achieves a **20.2%** conversion rate, a prominent machinery and farm equipment auction app reaches **32.4%**, and an enterprise-scale liquidation app boasts a massive **44.2%** conversion rate (converting 28.5K first-time downloads from 125K impressions). This confirms that a dedicated app store presence is highly effective at turning views into active bidders. ## Trend 3: Broad Global Reach and High-Value Demographics A mobile app removes geographical barriers and caters to users across a wide spectrum of devices. Active mobile users span multiple countries, from North America to Europe, Australia, and Asia. Furthermore, device demographics show a heavy concentration of users on flagship, premium devices. In our data, while standard models like the iPhone 13 or iPhone 15 are widely represented, we see thousands of active users on premium **Pro and Pro Max devices (such as the iPhone 15 Pro and iPhone 14 Pro Max)**. For instance, on a machinery and farm equipment auction platform, the iPhone 15 Pro Max, iPhone 15 Pro, and iPhone 14 Pro Max are the most active device cohorts. For an enterprise-scale consumer liquidation marketplace, premium Pro/Pro Max devices (such as 6.3K iPhone 15 Pro Max users, 3.9K iPhone 14 Pro Max users, and 2.9K iPhone 15 Pro users) combine to represent a massive portion of the active audience. This indicates that your most active bidders are tech-savvy users willing to invest in premium devices—a highly lucrative, high-intent demographic for high-value auctions. Additionally, Android audience data from the Google Play Console confirms a robust, parallel market. Across our client base, Android applications have secured significant installed bases—ranging from hundreds of active installs for niche auction portals to over **29,000 active installs** for large enterprise-level marketplaces. Having a native app on both iOS and Android ensures that you do not leave half of the mobile audience on the table. ## Trend 4: Website vs. Mobile App Loyalty While a responsive website is essential for initial discovery and capturing organic search traffic, the mobile app is where true brand loyalty is forged. Our cross-platform analysis reveals a compelling trend: although the website often sees a higher volume of casual, first-time visitors, the mobile app captures a highly concentrated segment of **power users**. Cross-referencing mobile active user data with registered web databases reveals that between **12% to nearly 30% of all registered users** are active monthly app users. In platforms like a major consumer liquidation marketplace (96K active mobile users out of 339.8K registered users, approx. **28.2%**) and a specialized regional auction portal (626 active mobile users out of 2,132 registered users, approx. **29.3%**), almost a third of the entire registered customer base relies directly on the mobile app. These mobile users are the ones setting push notifications and participating in the final, crucial minutes of an auction. ## Trend 5: Bulletproof Scalability and 100% Stability One of the biggest concerns for auctioneers is whether their platform can handle the surge of traffic during the closing moments of a high-stakes auction. The AuctionWorx Mobile App is built to ensure 100% mission launch success. During peak auction closing events across our client base, the mobile app infrastructure routinely supports thousands of **concurrent live users** per minute seamlessly. For instance, an enterprise-scale consumer liquidation app's active real-time load consistently scales up to **2,914 active users** in the last 30 minutes, handling massive concurrent updates and bid placements without a hitch. Furthermore, this high-performance handling is backed by stellar app reliability. Across all of our client analytics dashboards, the App Stability metric consistently showcases a flawless **100% Crash-Free Users** status. This guarantees that your bidders won't experience app crashes or connection losses at the critical last seconds of an auction. ## Trend 6: Driving Real Bidding Competition Ultimately, user engagement and downloads matter most when they translate to bidding activity. The presence of a mobile app helps keep bidders connected to live auctions, resulting in an exceptionally high percentage of active lots receiving bids. In our client dashboard reviews, we have observed a remarkable trend in listing activity. For a mid-sized machinery auction, out of 1,464 active lots, an incredible **1,387 active lots had active bids or purchases (approx. 94.7%)**. For larger enterprise-scale liquidators, even with massive inventory volumes (e.g., over 34,900 active lots), more than **18,500 lots received active bids or purchases**. By putting auctions in the palm of the buyer's hand and sending timely push notifications when outbid, the mobile app ensures that inventory doesn't go unnoticed, especially during high-velocity [live auction events](https://www.systenics.com/auctionworx/live-auctions/). It drives competitive, multi-bid scenarios that maximize final hammer prices. ## The Systenics Advantage The [AuctionWorx Mobile App](https://www.systenics.com/auctionworx/mobile-apps/) is not just a simplified website; it’s a fully native experience designed to offer lightning-fast load times, push notifications for outbids or ending auctions, and a secure, intuitive bidding interface. These features are purpose-built to keep your audience engaged and bidding. ## Ready to Accelerate Your Growth? The data speaks for itself. Investing in a mobile app for your AuctionWorx platform is a proven strategy to increase user engagement, expand your reach, and ultimately drive higher revenue. Let our Superhero Squad help you launch your next successful mission. [Connect for mission launch](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) today to learn more about our Mobile App solutions and how we can tailor them to fit your specific auction business needs. ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) - [AuctionWorx mobile apps](https://www.systenics.com/auctionworx/mobile-apps/) - [Community activity feed](https://www.systenics.com/auctionworx/community-activity-feed/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Use Lucene.Net in for faster data search URL: https://www.systenics.com/blogs/use-lucenenet-in-for-faster-data-search/ Description: This tutorial explains how to use Lucene.Net to achieve faster search responses in ASP.NET or MVC or C# applications. You can use Lucene.Net library to create indexes and search to retrieve the data which can be sorted by relevance or by a sort field. # Use Lucene.Net in for faster data search **by:** Dhanashri Karale **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*C#*](https://www.systenics.com/blogs/tag/c-sharp/) ## Introduction This tutorial explains how to use Lucene.Net to achieve faster search responses in ASP.NET or MVC or C# applications. ## Why Lucene.Net? All business or consumer applications require data search and it can be implemented using SQL LIKE clause or SQL Full-Text Search. But we found that it is much faster to search data when we use Lucene.Net library. Lucene is a full-text search library which uses inverted index for search due to which it is able to achieve fast search responses. You can use Lucene.Net library to create indexes and search to retrieve the data which can be sorted by relevance or by a sort field. *“Lucene.Net is a port of the Lucene search engine library, written in C# and targeted at .NET runtime users. The Lucene search library is based on an inverted index.”* Read more about Lucene.Net from [Apache Lucene.Net](https://lucenenet.apache.org/) or [Lucene.Net GitHub](https://github.com/apache/lucenenet). Let’s start with the coding :) ## Setup C# Lucene Project Before you start writing your first example using Lucene.Net library, you have to make sure that you have setup your Lucene environment properly. Let’s start by creating a new project with name - “LuceneConsoleApplication”. Open VS and New Project -> Visual C# -> Windows -> Console Application. Add "[Lucene.Net](https://www.nuget.org/packages/Lucene.Net/)" references using NuGet Package Manager in your project. Add below key in App.config file. This is the path where we will store the Lucene indexes. It will create "LuceneIndexes" in bin directory. We can even pull the data from SQL Server database and create Lucence indexes. In this tutorial and sample given below, we have created a list using C# code. ``` ``` In code given below, the StartLuceneIndexCreateProcess() method will create Lucene indexes. ``` class Program { static void Main(string[] args) { try { LuceneIndexer startIndexer = new LuceneIndexer(); Console.WriteLine("Starting Lucene index creation process for search...\r\n"); Console.WriteLine("Lucene index has been created from the following list:"); // This method will create Lucene indexes according to your given list items. startIndexer.CreateLuceneIndexes(); Console.WriteLine(""); // You can check CFX and CFS file in folder "..\LuceneConsoleApplication\App_Data". // Open the file in Notepad or any other text editor and you can see list of items. Console.WriteLine("Lucene Index creation successful!\r\n"); GetSearchLucene getSearchLucene = new GetSearchLucene(); Console.WriteLine("Enter a name to search:"); // Get input string from user string inputParam = Console.ReadLine(); List result = getSearchLucene.GetSearchLuceneText(inputParam); Console.WriteLine(""); Console.WriteLine("You searched for:"); if (result.Count > 0) { foreach (var item in result) { Console.WriteLine(item.Actor); } } else { Console.WriteLine("Sorry! No matching records found."); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } } ``` File #1 - Program.cs – Main() method ### Create Indexes for Search Now, let’s add list of items to CreateDocument() method. Directory represents the storage location of the indexes. Write your desired directory path in the App.config file. Here we will create our index of our list items. User given input will searched with "Actor" key field. ``` private void StartLuceneIndexCreateProcess() { string luceneIndexStoragePath = @ConfigurationManager.AppSettings["LuceneIndexStoragePath"]; bool folderExists = System.IO.Directory.Exists(luceneIndexStoragePath); if (!folderExists) System.IO.Directory.CreateDirectory(luceneIndexStoragePath); analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); Lucene.Net.Store.Directory directory = Lucene.Net.Store.FSDirectory.Open(new System.IO.DirectoryInfo(luceneIndexStoragePath)); writer = new Lucene.Net.Index.IndexWriter(directory, analyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.LIMITED); try { // We will populate below list to create Lucene index. List actorsList = new List(); actorsList.Add("Johnny Depp"); actorsList.Add("Robert Downey Jr."); actorsList.Add("Johnny Depp"); actorsList.Add("Tom Cruise"); actorsList.Add("Brad Pitt"); actorsList.Add("Tom Hanks"); actorsList.Add("Denzel Washington"); actorsList.Add("Russell Crowe"); actorsList.Add("Kate Winslet"); actorsList.Add("Christian Bale"); actorsList.Add("Hugh Jackman"); actorsList.Add("Will Smith"); actorsList.Add("Sean Connery"); foreach (var item in actorsList) { Console.WriteLine(item); writer.AddDocument(CreateDocument(item.ToString())); } } catch { Lucene.Net.Index.IndexWriter.Unlock(directory); throw; } finally { writer.Optimize(); analyzer.Close(); writer.Dispose(); analyzer.Dispose(); } } private Lucene.Net.Documents.Document CreateDocument(string actorName) { try { Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document(); doc.Add(new Lucene.Net.Documents.Field("actors", actorName, Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.ANALYZED)); return doc; } catch { throw; } } ``` File #2 – LuceneIndexer.cs - Contains code to create Lucene indexes ### Search Provided input will pass to GetSearchLuceneText() method. GetLuceneIndexPath() method will get the path of stored Lucene index i.e "bin\Debug\LuceneIndexes" folder. Input given by user will search in "LuceneIndexes" folder using Search() method. ``` public class GetSearchLucene { public List GetSearchLuceneText(string actorName) { LuceneSearcher searchIndex = new LuceneSearcher(GetLuceneIndexPath().FullName); List results = new List(); if (actorName != string.Empty) { results = searchIndex.Search(actorName, "actors").ToList(); } return results; } // Get directory path for Lucene index creation public DirectoryInfo GetLuceneIndexPath() { return new DirectoryInfo(ConfigurationManager.AppSettings["LuceneIndexStoragePath"]); } } ``` File #3 - GetSearchLucene.cs - Contains code to invoke search on Lucene indexes ### Search method IndexSearcher class acts as a core component which searcher indexes created during indexing process. Lucene directory will point to location where indexes are to be stored. Initialize the QueryParser object created with a standard analyzer having version information and index name on which this query is to run. ``` public List Search(string searchText, string searchField) { List output = new List(); string searchQuery = string.Empty; try { if (string.IsNullOrEmpty(searchText.Trim())) { throw new Exception("You forgot to enter something to search for..."); } searchQuery = searchText; } catch { throw; } try { // Open the IndexReader with readOnly=true. // This makes a big difference when multiple threads are sharing the same reader, // as it removes certain sources of thread contention. searcher = new Lucene.Net.Search.IndexSearcher(_directory, true); analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); output = (GetSearchResultByField(searchQuery, searchField, searcher, analyzer)); } catch { throw; } finally { analyzer.Close(); analyzer.Dispose(); searcher.Dispose(); } return output; } ``` File #4.1 – LuceneSearcher.cs - Contain code to search on Lucene indexes ### Mapping With Lucene User given input will be mapped with search field and user input search will be fetched from document object. ``` private Lucene.Net.Search.Query ParseQuery(string searchQuery, Lucene.Net.QueryParsers.QueryParser parser) { Lucene.Net.Search.Query query; try { query = parser.Parse(searchQuery.ToLower().Trim() + "*"); } catch (Lucene.Net.QueryParsers.ParseException) { query = parser.Parse(Lucene.Net.QueryParsers.QueryParser.Escape(searchQuery.Trim())); throw; } return query; } private IEnumerable MapLuceneDataToIDList(IEnumerable hits, Lucene.Net.Search.IndexSearcher searcher) { return hits.Select(hit => MapLuceneData(searcher.Doc(hit.Doc))).ToList(); } // Mapping Lucene data private LuceneData MapLuceneData(Lucene.Net.Documents.Document doc) { return new LuceneData { Actor = (doc.Get("actors")) }; } ``` File #4.2 – LuceneSearcher.cs - Contains code to prase and map Lucene search data You can [download our sample](https://github.com/systenics/LuceneConsoleApplication) LuceneConsoleApplication project from GitHub. Happy Coding :) ## Related pages on Systenics - [AI-powered listing description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Use Lets Encrypt SSL with AuctionWorx URL: https://www.systenics.com/blogs/use-lets-encrypt-ssl-with-auctionworx/ Description: While developing ASP.NET or ASP.NET MVC Web or WebAPI applications, we use IIS self-signed certificate to test sites locally or on test servers with HTTPS enabled. Such HTTPS websites throw a warning message when they are accessed first time from any browser. If you are using WebAPI with HTTPS and trying to access those APIs from Ionic or iOS mobile applications, then it will not work. This article focuses on configuration of Let’s Encrypt SSL Certificate with AuctionWorx web application. # Use Lets Encrypt SSL with AuctionWorx **by:** Shailesh Patel **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/) ## Introduction While developing ASP.NET or ASP.NET MVC Web or WebAPI applications, we use IIS self-signed certificate to test sites locally or on test servers with HTTPS enabled. Such HTTPS websites throw a warning message when they are accessed first time from any browser. If you are using WebAPI with HTTPS and trying to access those APIs from Ionic or iOS mobile applications, then it will not work. This article focuses on configuration of Let’s Encrypt SSL Certificate with AuctionWorx web application running on the[AuctionWorx platform](https://www.systenics.com/auctionworx/). If you need help implementing security, infrastructure, or custom workflows on top of the platform, see our[AuctionWorx development and customization services](https://www.systenics.com/auctionworx/development-and-customization/). ## What is Let's Encrypt? Let's Encrypt is a free, automated, and open Certificate Authority. *"To enable HTTPS on your website, you need to get a certificate (a type of file) from a Certificate Authority (CA). Let’s Encrypt is a CA. In order to get a certificate for your website’s domain from Let’s Encrypt, you have to demonstrate control over the domain. With Let’s Encrypt, you do this using software that uses the ACME protocol, which typically runs on your web host."* Read more about Let’s Encrypt from their[FAQ](https://letsencrypt.org/docs/faq/) or[Get Started](https://letsencrypt.org/getting-started/) or[How It Works](https://letsencrypt.org/how-it-works/) links. ## Let's Encrypt 1. Download[letsencrypt-win-simple](https://github.com/Lone-Coder/letsencrypt-win-simple/releases) from GitHub and extract it on your server. 2. Run “letsencrypt.exe” and follow instructions or enter following command: ``` letsencrypt.exe --accepttos --manualhost your_website.com --webroot C:\inetpub\wwwroot\your_website_folder ``` It will add a new certificate under IIS > Server Certificates. Figure 1: IIS > Server Certificates Copy files into root of your website under following folder ...your_website_folder\.well-known\acme-challenge 3. Now add following NuGet packages into RainWorx.FrameWorx.MVC project. ``` ``` 4. Add following line into Startup.cs file. ``` using Microsoft.Owin.FileSystems; public class Startup { public void Configuration(IAppBuilder app) { app.Map("/.well-known", letsEncrypt => { letsEncrypt.Use((context, next) => { IFileInfo file; var fileSystem = new PhysicalFileSystem(@".\.well-known"); if (!fileSystem.TryGetFileInfo(context.Request.Path.Value, out file)) { return next(); } return context.Response.SendFileAsync(file.PhysicalPath); }); }); GlobalHost.DependencyResolver.UseSqlServer(ConfigurationManager.ConnectionStrings["db_connection"].ConnectionString); app.MapSignalR(); } } ``` 5. After adding above code publish a new build and access https://your_website.com and it will show a valid certificate. ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) - [AuctionWorx mobile apps](https://www.systenics.com/auctionworx/mobile-apps/) - [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Use jQuery Lazy Load with Knockout binding URL: https://www.systenics.com/blogs/use-jquery-lazy-load-with-knockout-binding/ Description: This tutorial explains how to use jQuery lazy loading technique with Knockout binding. # Use jQuery Lazy Load with Knockout binding **by:** Ruchita Kansara **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*C#*](https://www.systenics.com/blogs/tag/c-sharp/), [*ASP.NET MVC*](https://www.systenics.com/blogs/tag/aspnet-mvc/) Recently I came across a requirement to use jQuery Lazy Load with Knockout binding. In this article, I will explain the steps for binding lazy loaded content to Knockout template. ## Let's Start 1. Create an ASP.NET Web Project > MVC 4 Framework. 2. Create a new ContentController.cs file under Controller folder. Write new Action method. ``` public ActionResult LoadContent() { return View(); } ``` 3. Create a new View for above Action method. It will create LoadContent.cshtml file under Views > Content folder. 4. Install Knockout.js using NuGet and include it into your page along with jQuery. ``` ``` 5. Write the following HTML code with Knockout bindings to display your result. ```
Loading...
``` Here I have created a "div" tag which has vertical scrollbar and inside that div, I have an un-ordered list which binds each element of numbersList i.e. Knockout Observable Array to list item. Now,
  • binds number (Knockout Observable) to list. 6. After creating HTML code, write script to bind the data. ``` var arr = new Array(); function KnockoutViewModel(no) { var self = this; self.number = ko.observable(no); } function ModelBinding() { var self = this; self.numbersList = ko.observableArray([]); } var bind = new ModelBinding(); ko.applyBindings(bind); for (var i = 1; i <= 10; i++) { var obj = new KnockoutViewModel(i); arr.push(obj); } bind.numbersList(arr); ``` This script will bind numbers 1-10 to the list. 7. Create an Action method to fetch next set of data on scroll down event. ``` public JsonResult LazyLoadContent(int page = 11) { int[] numbers = new int[10]; for (int i = 0; i < 10; i++) { numbers[i] = page; page = page + 1; TempData["LastPage"] = page; } return Json(numbers, JsonRequestBehavior.AllowGet); } ``` This method returns next 10 numbers in JSON format. This method gets invoked whenever the scroll down event occurs. 8. Add this additional code to your script which will help bind data on scroll event. ``` $("#page").scroll(function () { if ($(this)[0].scrollHeight - $(this).scrollTop() == $(this).outerHeight()) { call(); $('#symbol').empty(); } }); var page = 1; function call() { $.ajax({ url: '@Url.Action("LazyLoadContent","Content")', data: { page: page + 10 }, success: function (data) { for (var i = 0; i < data.length; i++) { var obj = new KnockoutViewModel(data[i]); arr.push(obj); } bind.numbersList(arr); page = page + 10; }, error: function () { alert('error'); } }); } ``` The above code snippet will check scroll bar position and if it is at the bottom of the "div" tag then it makes an AJAX call to the action in the Controller. It will fetch the next set of data as result, bind it and display the results on screen. 9. Output ## Download Sample Click here to download the sample application. ## Related pages on Systenics - [AI-powered listing description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Understanding Visual Studio 2015 ASP.NET Web Project Changes URL: https://www.systenics.com/blogs/understanding-visual-studio-2015-aspnet-web-project-changes/ Description: Microsoft has recently released Visual Studio 2015 Preview for evaluation. Along with Visual Studio Microsoft has announced that it will open source complete ASP.NET stack and make it hostable on Linux as well as Mac. Microsoft has changed their web project significantly to make it work across open source platforms. Visual Studio 2015 preview brings a lot of enhancements in the editor as well as one of the significant components that ship with it is ASP.NET v5 and total change in project structure of web applications. In an effort to embrace open source they have made a lot of changes to to the project templates to utilize a whole bag of popular open source technologies like NPM, Grunt and Bower. Enabling the use of popular open source package managers saves Microsoft from duplicating and maintaining the rapid speed of changes and new developments that are happening on the web. For example instead of building their open Less to CSS compiler and keeping it updated, now they enable developers to use popular open source versions of the same. # Understanding Visual Studio 2015 ASP.NET Web Project Changes **by:** Saurabh Nandu **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*ASP.NET MVC*](https://www.systenics.com/blogs/tag/aspnet-mvc/), [*Visual Studio*](https://www.systenics.com/blogs/tag/visual-studio/) ## Overview Microsoft has recently released [Visual Studio 2015 Preview](http://www.visualstudio.com/downloads/visual-studio-2015-downloads-vs) for evaluation. Along with Visual Studio Microsoft has announced that it will open source complete ASP.NET stack and make it hostable on Linux as well as Mac. Microsoft has changed their web project significantly to make it work across open source platforms. Visual Studio 2015 preview brings a lot of enhancements in the editor as well as one of the significant components that ship with it is ASP.NET v5 and total change in project structure of web applications. In an effort to embrace open source they have made a lot of changes to to the project templates to utilize a whole bag of popular open source technologies like NPM, Grunt and Bower. Enabling the use of popular open source package managers saves Microsoft from duplicating and maintaining the rapid speed of changes and new developments that are happening on the web. For example instead of building their open Less to CSS compiler and keeping it updated, now they enable developers to use popular open source versions of the same. This blog post tries to get a better understanding of the new components of the ASP.NET 5 web application project as well as get an understanding of the changes that have been made from ASP.NET MVC5 Project template in Visual Studio 2013. I have tried to skim fragmented information available across several blogs and websites to try and get a better understanding of the different components. ## ASP.NET 5 vs. ASP.NET MVC 6 One of the major confusion that I had when announcements were made for Visual Studio 2015 preview was the difference between ASP.NET 5 and ASP.NET MVC 6. We already had ASP.NET MVC 5 support in Visual Studio 2013, so naming of the new web stack ASP.NET 5 is bound to create confusion. If you head over to the [ASP.NET VNext website](https://www.asp.net/vnext/overview/aspnet-vnext/aspnet-5-overview) Microsoft explains, “ASP.NET 5 is a lean .NET stack for building modern web apps. We built it from the ground up to provide an optimized development framework for apps that are either deployed to the cloud or run on-premises. It consists of modular components with minimal overhead, so you retain flexibility while constructing your solutions.”. In the same article a bit further down they explain, “In ASP.NET 5, MVC, Web API, and Web Pages will be merged into a single framework called MVC 6. This merging removes duplication from the framework and makes it easier for you to develop apps that use these programming frameworks. You no longer need to write slightly different code depending on whether you are within an MVC, Web API, or Web Pages context.”. So essentially MVC 6 is the framework on top of ASP.NET 5 stack which supports building MVC, Web API and Web Pages based applications. The older Web Forms applications are also supported and the Web Forms framework version is now 4.6. I do not remember earlier there be a name for the stack, but it seems now the are naming the stack of technologies as ASP.NET 5 as well as the frameworks separately it really is going to cause confusion for some time. ## Creating ASP.NET 5 Web Application Project Fire up Visual Studio 2015 Preview and click **File** menu –>**Add new Project** to bring up the **New Project** Dialog. Select the **ASP.NET Web Application** template under**Visual C# –> Web** as shown in figure 1 below. Figure 1: New Project dialog Enter the location to create the project as well as the name of the project and solution and click **OK**. I have kept default names since the purpose for us is to determine the contents of the project items rather than its naming in the blog. The next dialog brings up the selection of the type of ASP.NET project you want to create this is similar to the dialog introduced in Visual Studio 2013. If you select**MVC** or **Web API** then it will create a project in older Visual Studio 2013 compatible project format. Our goal in this blog is to explore the new ASP.NET 5 project template, so select the**ASP.NET 5 Starter Web** template and click **OK **to create the project. You will see that unlike older **MVC** or**Web API** projects where you had a selection of **Add folders and core references for** to select support for Web Forms, MVC or Web API needed in your project, this option is grayed out since ASP.NET 5 unifies all these into a single project. Figure 2: New ASP.NET Project dialog ## Understanding the different parts of ASP.NET 5 Project Once the new ASP.NET 5 Web application project is created lets look at the Solution Explorer window to get a better idea of the different components of the new project template. Figure 3: Solution Explorer As you can see from figure 3 above there are a lot of new items in the project structure which did not exist before, lot of familiar items like web.cofig, global.asax etc. are totally missing. Let’s try to go step by step and try to understand the different parts of this project template. ### Global.json – Solution Item Starting from the top of the list we see that under the solution there is a project called as **Solution Items** which contains a single file called **global.json**. If you open the file file it has the code as shown in listing 1 below. ``` { "sources": [ "src", "test" ] } ``` Listing 1: global.json file Something obvious that jumps out is that Microsoft is now trying to shift all configuration information into json file formats so that its easier for other tools to work along with ASP.NET on different platforms. The global.json file is used to mange project to project dependencies. Its useful when there are multiple projects in your solution file then visual studio uses this file to determine dependencies amongst the different projects within the solution. By default, project-to-project references lookup will use parent directory, plus the global.json-defined directories. In code listing 1 above two locations for **sources** property are defined as **src** and **test**. The recommendation is to keep all the source code projects under the src folder and test related projects under the test folder for easier separation which did not exist before. Using the global.json file you can easily reference projects which are not contained within the same solution folder. As you can see that src folder has been defined as a folder for keeping sources, various projects that you add will be added under the src folder on the physical disk. If you refer back to Figure 3 you will see that our project file WebApplication1 is also contained within the parent src folder. ### wwwroot folder The next item under the Project folder is the **wwwroot** folder. The **wwwroot** folder is new in ASP.NET 5 to store all of the static files in your project. Any files including HTML files, CSS files, image files, and JavaScript files which are sent to the users browser should be stored inside this folder. Code files should be placed outside of **wwwroot** including C# files and Razor views. Having a **wwwroot** folder keeps a clean separation between code files and static files, it brings clarity to the items that will be sent to the server and the items that should remain on the dev machine. If you look at figure 3 above**wwwroot** folder has **css** and **lib** sub folders. **Css** folder is a place to keep your custom css files, while **lib** folder is used by **Bower** package manger (more on it later). The lib folder contains the packages downloaded by **Bower** and can contain css,js and images. Figure 3 above shows that **lib** folder has a **bootstrap** package folder, if you expand it you will find css, js as well all other assets related to the boostrap package. In MVC4 we used the content folder to keep style sheets as well as scripts folder for referenced scripts, these folders are gone now. So its important to understand that there is no single folder for style sheets or scripts. the could be in any of the folders within**wwwroot**. Its interesting to note that if you wish to reference the css,js or img files in your razor views, using the **~** keyword ensures direct path to the **wwwroot** folder. So support you wanted to reference **site.css** in your view you can access it using the syntax. You can see that the **~** keyword points to the **wwwroot** folder. ### Dependencies The next item you see in the Solution Explorer is Dependencies. This is a new item added in Visual Studio 2015, to support two new open source package managers [Bower](http://bower.io/) and[NPM](https://www.npmjs.org/). [This article](https://www.asp.net/vnext/overview/aspnet-vnext/grunt-and-bower-in-visual-studio-2015) from ASP.NET give a good idea on how to use and configure **Bower** and **NPM** in detail. #### NPM **NPM** called the **Node Package manager** was created to be the package manager for **NodeJS** framework and is quite popular. Visual Studio 2015 has built capabilities to invoke **NPM** and install its packages. A lot of current open source tools are distributed via NPM, so having it right within Visual Studio makes it pretty easy for Web Developers to get the best of both worlds, a rich content editing experience as well as access to the latest top rated open source web libraries. The solution contains**package.json** file which is used to maintain the list of NPM packages and their versions. The default **package.json** files is listed in listing 2 below. ``` { "version": "0.0.0", "name": "WebApplication1", "devDependencies": { "grunt": "^0.4.5", "grunt-bower-task": "^0.4.0" } } ``` Listing 2: package.json – configration file for NPM Listing 2 above shows that two NPM packages are configured right now **grunt** and **grunt-bower-task** along with their version numbers. Visual Studio shows intellisense in the editor for the name as well as version number of packages. You can directly edit the **package.json** file to add new packages from NPM and Visual Studio will automatically download and make it available for your project. #### Bower **Bower** is built on top of NPM and is used as a package manager for client side libraries. So any external client (browser) side resource like bootstrap, requirejs, angularjs should be installed via bower. This replaces the function of **NuGet** package manager which was used earlier to install all packages in Visual Studio for all client side libraries. **NuGet** package manager still exists, but the recommendation is to use it for only server side libraries. This decision is bound to create a lot of confusion with existing applications being migrated to ASP.NET 5 having all their packages coming from **NuGet**. The **bower.json** file in the solution contains the configuration for bower, listing 3 below shows the default configuration for bower. ``` { "name": "WebApplication1", "private": true, "dependencies": { "bootstrap": "~3.0.0", "jquery": "~1.10.2", "jquery-validation": "~1.11.1", "jquery-validation-unobtrusive": "~3.2.2" }, "exportsOverride": { "bootstrap": { "js": "dist/js/*.*", "css": "dist/css/*.*", "fonts": "dist/fonts/*.*" }, "jquery": { "js": "jquery.{js,min.js,min.map}" }, "jquery-validation": { "": "jquery.validate.js" }, "jquery-validation-unobtrusive": { "": "jquery.validate.unobtrusive.{js,min.js}" } } } ``` Listing 3: bower.json – Bower configuration file Listing 3 above shows that by default **bower.json** file has 4 dependencies **Bootstrap**, **jQuery**, **jQuery Validation** and** jQuery Unobtrusive Validation** with their respective version numbers. Visual Studio has intellisense for editing **Bower.json** file too and it list the package names and their versions. Once new packages are added Visual Studio will download and make them available for your project. ## References The next section in the Solution Explorer is the all familiar references section. Here all server side assemblies referenced in the project or added via **NuGet** are displayed. Although if you expand the references and the entries within it you will find that lot of changes have been made under the hood. ### NuGet Now you can see that references are grouped so if your referenced NuGet package depends on several others then they get nested within (unless they are being directly used). You can also create commonly used reusable code as NuGet package and reference it. The NuGet packages are managed from the dependencies section in the **project.json** file. Visual Studio has also updated the UI for the package manager look at figure 4 below. Figure 4: NuGet package manager As you can see from figure 4 the interface for the package manager is changed. The tree view for **Installed**, **Available** and **Upgrade** packages has been removed in favor of a **Filter** for the packages. Plus whole lot more details about a package are shown as well as their dependencies are clearly listed in the details view. One of the biggest issue that I see right now is that there is no clarity if the package is ASP.NET 5 compatible or not. Or to be more precise if the package contains only server side code or server and client side libraries. Today nothing stops a developer to shoot themselves by trying to install a client library like **Bootstrap** from nuget. Although the project folder structure has changed installing a client package succeeds but it fails when you try to build the project. There needs to be a clear way to understand which libraries are safe for ASP.NET v5 and which are not. Unless MS does this clear distinction there is bound to be a lot of developer frustration. Expecting that the developer will know about the client library support just looking at the list of dependencies seems to be a mistake. ## Controllers, Models, Migrations and Views These folders remain the same and their contents have only been updated to reflect MVC6 patterns. ## Config.json The infamous XML based web.config file has been dumped in favor of **config.json** which tries to only focus on keeping configuration values for the project.**Config.json** is also a standard way to store properties in NPM. So here too Microsoft has made a major change removing the XML based configuration file in favor of json formatted standard file. Listing 4 below shows the standard syntax for the **config.json** file. ``` { "Data": { "DefaultConnection": { "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=aspnet5-WebApplication1-671e15dd-8d5b-45b2-b8a4-0ca00a36cd8c;Trusted_Connection=True;MultipleActiveResultSets=true" } }, "EntityFramework": { "ApplicationDbContext": { "ConnectionStringKey": "Data:DefaultConnection:ConnectionString" } } } ``` Listing 4: config.json file As you can see the listing above shows configuration for the database connection string used by Entity Framework as well as the second setting of pointing entity framework to the default connection string. ## gruntfile.js – Grunt Just like Bower, [Grunt](http://gruntjs.com/) too is a package manager that depends on NPM, but its used to run tasks and automate tasks on the client side. It can automate tasks like generating css files from less files as well as several other client side optimizations. [This article](https://www.asp.net/vnext/overview/aspnet-vnext/grunt-and-bower-in-visual-studio-2015) provides information on how to configure and run **Grunt** tasks.**Gruntfile.js** is used to define tasks that will be run. Visual Studio has added the integration to be able to integrate **Grunt** with the visual studio build process so that before or after a build Grunt tasks can be invoked to perform client side tasks before the build can viewed in the browser. Listing 5 below shows the default **gruntfile.js** code. ``` // This file in the main entry point for defining grunt tasks and using grunt plugins. // Click here to learn more. http://go.microsoft.com/fwlink/?LinkID=513275&clcid=0x409 module.exports = function (grunt) { grunt.initConfig({ bower: { install: { options: { targetDir: "wwwroot/lib", layout: "byComponent", cleanTargetDir: false } } } }); // This command registers the default task which will install bower packages into wwwroot/lib grunt.registerTask("default", ["bower:install"]); // The following line loads the grunt plugins. // This line needs to be at the end of this this file. grunt.loadNpmTasks("grunt-bower-task"); }; ``` Listing 5: gruntfile.js – grunt tasks As you can see there is a single task defined i.e. to install **Bower** plug-ins in the wwwroot/lib directory. ## project.json – Project configuration The last file left to discover is the **project.json** file. This file contains several configuration information, parts of things which could be configures via the **web.config** file has been broken into **config.json** and **project.json** files. Although I believe **web.cofig** file could still be used if you were migrating an existing project. [This article](https://github.com/aspnet/Home/wiki/Project.json-file) gives a better description of the various configuration sections within the **project.json** file. Also as discussed earlier this file holds the NuGet packages as well as version information too. Listing 6 below shows the default **project.json** file. ``` { /* Click to learn more about project.json http://go.microsoft.com/fwlink/?LinkID=517074 */ "webroot": "wwwroot", "version": "1.0.0-*", "dependencies": { "EntityFramework.SqlServer": "7.0.0-beta1", "EntityFramework.Commands": "7.0.0-beta1", "Microsoft.AspNet.Mvc": "6.0.0-beta1", //"Microsoft.AspNet.Mvc.WebApiCompatShim": "6.0.0-beta1", "Microsoft.AspNet.Diagnostics": "1.0.0-beta1", "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta1", "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta1", "Microsoft.AspNet.Security.Cookies": "1.0.0-beta1", "Microsoft.AspNet.Server.IIS": "1.0.0-beta1", "Microsoft.AspNet.Server.WebListener": "1.0.0-beta1", "Microsoft.AspNet.StaticFiles": "1.0.0-beta1", "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta1", "Microsoft.Framework.CodeGenerators.Mvc": "1.0.0-beta1", "Microsoft.Framework.Logging": "1.0.0-beta1", "Microsoft.Framework.Logging.Console": "1.0.0-beta1", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta1" }, "commands": { /* Change the port number when you are self hosting this application */ "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000", "gen": "Microsoft.Framework.CodeGeneration", "ef": "EntityFramework.Commands" }, "frameworks": { "aspnet50": { }, "aspnetcore50": { } }, "exclude": [ "wwwroot", "node_modules", "bower_components" ], "packExclude": [ "node_modules", "bower_components", "**.kproj", "**.user", "**.vspscc" ], "scripts": { "postrestore": [ "npm install" ], "prepare": [ "grunt bower:install" ] } } ``` Listing 5: project.json file Listing 5 above shows the various sections as well as pre configurations of the **project.json** file where it defines a wide array of settings from project version to project dependencies. ## Conclusion In the blog post I have tried to cover some of the essential changes that have happened in Visual Studio 2015 Preview ASP.NET 5 project. Microsoft has put a strong emphasis on utilizing the power of open source tools and providing an integrated experience. The have gone to the extant of marginalizing their own NuGet packager manager in favor of open source npm for a wide array of uses. In the process they have added a lot of confusion for new developers who need to know where to utilize which package manager as well as existing projects being migrated to ASP.NET v5 too will need a lot of refactoring to conform to the later standards. ## Related pages on Systenics - [AI-powered listing description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) - [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Uncheck Radio Button in WPF URL: https://www.systenics.com/blogs/uncheck-radio-button-in-wpf/ Description: Recently I found myself in need of uncheck my selected Radio Button in WPF (Windows Presentation Framework). Unfortunately Radio Button has an unchecked event but it doesn’t fire. I thought of implementing uncheck onClick event, but even in this case it always givesChecked valuetrue after clicking on Radio Button. I started searching for examples in internet, but didn’t find an appropriate way to achieve this. One way I thought of styling the Checkbox to look like a Radio Button, but doing so is also had few issues. Then I thought of extending the Radio Button and use Dependency Property to achieve the same. This article describes the implementation of the Radio Button that supports uncheck and the way you can use it in your own applications. You can find the full implementation ofRadioButtonExtensionclass in the attached demo. # Uncheck Radio Button in WPF **by:** Nilesh Anchan **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*.NET*](https://www.systenics.com/blogs/tag/net/), [*C#*](https://www.systenics.com/blogs/tag/c-sharp/), [*WPF*](https://www.systenics.com/blogs/tag/wpf/) ## Introduction Recently I found myself in need of uncheck my selected Radio Button in WPF (Windows Presentation Framework). Unfortunately Radio Button has an unchecked event but it doesn’t fire. I thought of implementing uncheck onClick event, but even in this case it always gives Checked value true after clicking on Radio Button. I started searching for examples in internet, but didn’t find an appropriate way to achieve this. One way I thought of styling the Checkbox to look like a Radio Button, but doing so is also had few issues. Then I thought of extending the Radio Button and use Dependency Property to achieve the same. This article describes the implementation of the Radio Button that supports uncheck and the way you can use it in your own applications. You can find the full implementation of RadioButtonExtension class in the attached demo. ## Using the Code Create a new WPF application in Visual Studio 2012. Then add a new class in your project and give a name as RadioButtonExtension. Inherit the class with RadioButton object so that we can extend its events. Now in the constructor of RadioButtonExtension class initialize the events of radio buttons as shown Listing 1 below: Listing 1 - RadioButtonExtension.cs – modified constructor and events ``` public class RadioButtonExtension : RadioButton { public RadioButtonExtension() { this.Checked += RadioButtonExtension_Checked; this.Click += RadioButtonExtension_Click; } void RadioButtonExtension_Click(object sender, System.Windows.RoutedEventArgs e) { } void RadioButtonExtension_Checked(object sender, System.Windows.RoutedEventArgs e) { } } ``` Now create a Dependency Property in **RadioButtonExtension.cs**in order to change the checked property of Radio Button as follows: Listing 2 – Dependency Property ``` public bool? IsCheckedChanged { get { return (bool?)GetValue(IsCheckedChangedProperty); } set { SetValue(IsCheckedChangedProperty, value); } } // Using a DependencyProperty as the backing store for IsChanged. // This enables animation, styling, binding, etc... public static readonly DependencyProperty IsCheckedChangedProperty = DependencyProperty.Register("IsChanged", typeof(bool?), typeof(RadioButtonExtension), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, CheckedChanged)); public static void CheckedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ((RadioButtonExtension)d).IsChecked = (bool)e.NewValue; } ``` Lastly create a static int property, **WasChecked** which will help us to know the previous status of Checkbox. I update the value of the**WasChecked** property in the **Click** and**Checked** event. I also update the dependency property**IsCheckedChanged** which will call**CheckedChanged** method on property change and assign the**Checked** value of Radio Button with the new value as shown in listing 3 below. Listing 3 - Modifying **WasChecked** property and**IsCheckedChanged** dependency property ``` public static int WasChecked { get; set; } void RadioButtonExtension_Click(object sender, System.Windows.RoutedEventArgs e) { if (WasChecked > 0) { this.IsCheckedChanged = !this.IsCheckedChanged; } WasChecked = 1; } void RadioButtonExtension_Checked(object sender, System.Windows.RoutedEventArgs e) { this.IsCheckedChanged = true; WasChecked = 0; } ``` The way this works is that when RadioButton is checked, the**Checked** event is fired which sets**WasChecked** = 0 and **IsCheckedChanged**=true. Then **Click** event is fired where I set**WasChecked** = 1. Similarly, when the RadioButton is clicked again it fires the **Click** event in which case it checks**WasChecked** > 0, so it sets the dependency property **IsCheckedChanged** = false. Which fires the event**CheckedChanged** which assigns the new value to the RadioButton. The full source code of the **RadioButtonExtension** class is shown in listing 4 below: Listing 4 – Full **RadioButtonExtension** class source code ``` using System.Windows; using System.Windows.Controls; namespace RadioButtonSam { public class RadioButtonExtension : RadioButton { public static int WasChecked { get; set; } public bool? IsCheckedChanged { get { return (bool?)GetValue(IsCheckedChangedProperty); } set { SetValue(IsCheckedChangedProperty, value); } } // Using a DependencyProperty as the backing store for IsChanged. //This enables animation, styling, binding, etc... public static readonly DependencyProperty IsCheckedChangedProperty = DependencyProperty.Register("IsChanged", typeof(bool?), typeof(RadioButtonExtension), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, CheckedChanged)); public static void CheckedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ((RadioButtonExtension)d).IsChecked = (bool)e.NewValue; } public RadioButtonExtension() { this.Checked += new RoutedEventHandler(RadioButtonExtension_Checked); this.Click += RadioButtonExtension_Click; } void RadioButtonExtension_Click(object sender, System.Windows.RoutedEventArgs e) { if (WasChecked > 0) { this.IsCheckedChanged = !this.IsCheckedChanged; } WasChecked = 1; } void RadioButtonExtension_Checked(object sender, System.Windows.RoutedEventArgs e) { this.IsCheckedChanged = true; WasChecked = 0; } } } ``` To use this new **RadioButtonExtension** in your project, you can include it in your **MainWindow.xaml** as shown in listing 5 below: Listing 5 – Using **RadioButtonExtension** in**MainWindow.xaml** ``` ``` Hope that this would help you in your projects which help me a lot. [Click here](https://www.systenics.com/media/3922/RadioButtonSam.zip) to download the source file. ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Systenics Website Reimagined - Relaunch! URL: https://www.systenics.com/blogs/systenics-website-relaunch/ Description: Systenics Solutions has reimagined itself over the years and a brand-new website has been designed and launched which demonstrates our core values. # Systenics Website Reimagined - Relaunch! **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*website*](https://www.systenics.com/blogs/tag/website/) ## Overview Our older website was starting to show age and unable to keep pace with styles. We had several internal discussions regarding a re-design but usually ended up shelving the plan since we were unable to identify and justify the reason for re-design if the outcome would just be a better design. At times we thought of just purchasing a template and updating the content and finish the process. ## Epiphany - Superhero's Squad During one of internal discussion, we realized what set us apart, is our phenomenal squad of Superhero Developers. Hand-picked, personally trained our full stack squad has been delivering completed projects on time and cost for several years now. But we have been shying away from the proclamation that we have best of the talent available. Learn more [about our team](https://www.systenics.com/about-us/) and how we work. 100% project success, super happy clients has been a feat that our squad has been regularly achieving no matter the size or complexity of the project. It was a no brainer for us to capitalize on our achievements and bring it across to even a larger set of clients. We have already put in the hard work for years, so why not stake a claim to it? Instead of 10X Developers, why not let everyone know about our Developer Superhero Squad who have been helping clients achieve 100% mission success? We present to the world, our Developer Squad of Super Heros with diverse skills set ready to solve any challenge given. ## Design Brief - Superhero's Theme Our senior superhero designer Naresh was briefed on the idea of reimaging the website using Superhero's at the core. While there was a sense of excitement there was also a sense of fear if we would be able to pull it off being true to the vision as well as make it look professionally appealing. Naresh took the challenge head-on and spent the next few months learning to draw and characterize superhero's - it was no ordinary task! But few months of sticking with the plan, we are proud to of the end result. It's visually appealing, modeled on our own team members and professional looking at the same time. As usual our squad delivers, no matter the challenge! The site does have rough edges and needs a few more tweaks but it's time for us to reveal to the world our refreshed, reimagined and relaunched service offerings. ## Squad Refresh, Retrain This launch also gives us renewed energy and focus to rework on our internal strengths and processes for better client outcomes. AI and Cloud based offerings are dominating the landscape and our squad is reimagining the ways we execute our missions in this renewed backdrop. Our squad embraces AI as being one of the key tools to achieve mission success going forward and we are making significant investments in training and building AI enhanced products and services. Lastly, we would like to thank our clients who have believed and supported us throughout our journey. Clients who have put unwavering faith in our squad over the years. It is the confidence that we have gained from these clients, which allows us to put on a bold new face and encourages us to push boundaries every day to deliver better and technologically superior outcomes. ## Specialist AI Superhero's Squad - Launched The speed at which generative AI is innovating is tremendous, touching and changing every business process. Businesses both small and large are seeing great benefits with the advent of AI and are demanding smart AI based solutions. Evolving with the latest trends we have launched a specialized AI Superhero's Squad at [https://systenics.ai](https://systenics.ai/). This squad is laser focused on the new trends, services and products in the AI space. Our mission is to ensure that we are able to deliver AI enhanced solutions and products to all our clients both old and new. ## Related pages on Systenics - [Industry solutions](https://www.systenics.com/solutions/) - [About Systenics](https://www.systenics.com/about-us/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Sync SQL Server 2012 Data with SQL CE 3.5 SP2 over the Internet using WCF Services using MS Sync Framework v2.1 URL: https://www.systenics.com/blogs/sync-sql-server-2012-data-with-sql-ce-35-sp2-over-the-internet-using-wcf-services-using-ms-sync-framework-v21/ Description: Recently, we were working on a client project where the client required multiple Windows Based Client Applications to be able to work offline and synchronize with the master MS SQL Database (hosted on the internet), when internet connection is available. We faced several challenges in building this application and I thought it would be a good idea to blog the solution we created for the client. In this post we have tried to build upon the samples provided by Microsoft but explain the whole process so that its easier for others to understand and implement this platform. This blog post does not try to explain in detail how sync framework works, but tries to explain the deployment and creation of WCF based web service to sync between server and clients over the internet. # Sync SQL Server 2012 Data with SQL CE 3.5 SP2 over the Internet using WCF Services using MS Sync Framework v2.1 **by:** Saurabh Nandu **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*.NET*](https://www.systenics.com/blogs/tag/net/), [*SQL CE 3.5 SP2*](https://www.systenics.com/blogs/tag/sql-ce-35-sp2/), [*SQL Server*](https://www.systenics.com/blogs/tag/sql-server/), [*Sync Framework 2.1*](https://www.systenics.com/blogs/tag/sync-framework-21/), [*WCF*](https://www.systenics.com/blogs/tag/wcf/), [*WPF*](https://www.systenics.com/blogs/tag/wpf/) ## Overview Recently, we were working on a client project where the client required multiple line of business Windows Based Client Applications to be able to work offline and synchronize with the master MS SQL Database (hosted on the internet), when internet connection is available. We faced several challenges in building this application and I thought it would be a good idea to blog the solution we created for the client. In this post we have tried to build upon the samples provided by Microsoft but explain the whole process so that its easier for others to understand and implement this platform. This blog post does not try to explain in detail how sync framework works, but tries to explain the creation of WCF based web service to sync between server and clients over the internet. The particular client that we were working for had employees who used to travel extensively and needed data at least refreshed daily. Internet connection could not be guaranteed at all times so creating a web/mobile based application was ruled out. There are significantly large number of businesses in developing countries like India who still don’t have access to reliable Internet connections, we have no choice but to build Windows desktop based applications for them. The best solution for this business problem was to create Windows based applications which would sync data with a central server hosted on the internet. ## Technology Selection Over the years there has been a much greater push of new technologies built for the web and mobile devices, but there seems to be much slower pace of development on the Windows application development side from Microsoft. The choice of technology for building Windows based application is WPF (Windows Presentation Framework), but the pace of development on WPF is certainly way behind the pace of development on the web technologies side. The state of technologies that allow synchronization between client and server is bad and totally confusing! The sync framework has not advanced in ages, while there is no alternative path presented. We are stuck to using Sync Framework v2.1, released in last quarter of 2010 for our solution since we wish to have a framework that provides automatic synchronization between SQL CE and SQL Server databases. The latest, Sync Framework 4 builds upon Sync Framework 2.1 and provides OData based synchronization so that you can synchronize between device platforms without installing any framework on the client platform, but it does not provide any features for automatic sync between client and server db. If you want to use Sync Framework 4 then you need to manually handle the client side sync code. The only highlight for this framework is that Microsoft is promoting it as the means to synchronize with Azure cloud databases, so there are some updated samples provided. The other major issue with using Sync Framework 2.1 is that it depends upon SQL CE 3.5 SP2 and does NOT work with the latest SQL CE 4.0. For reasons best known to Microsoft they have chosen to release SQL CE 4.0 without support for synchronization, so we are stuck to using SQL CE 3.5 SP2. Tooling support in Visual Studio 2012 is built to support SQL CE 4.0 and does not work with SQL CE 3.5. On the server side, we will expose the sync framework using WCF (Windows Communication Framework) web services. The core reason behind this blog post is that the sample presented by Microsoft is not well documented nor is it clear how to deploy the sample application. In this blog post we are building upon the sample provided by Microsoft but making things clear to understand. The default WCF sample provided by Microsoft is built under the assumption that the WCF service will be self-deployed, while we have modified the sample to deploy the service in IIS. To summarize technologies used, on client side we will use WPF, SQL CE 3.5 Sp2 and MS Sync Framework v2.1. On the server side we will use WCF web services, MS SQL 2012 (you can use MS SQL 2008/Express does not matter) and MS Sync Framework v2.1. We will be using Visual Studio 2012 and MS SQL 2012 for building this application. ## Installing SDK’s and Frameworks Before we begin development we need to have the following SDK’s and Frameworks installed if they are missing: [Microsoft Sync Framework 2.1 Software Development Kit (SDK)](http://www.microsoft.com/en-us/download/details.aspx?id=23217) - SyncSDK-v2.1-x64-ENU.msi or SyncSDK-v2.1-x86-ENU.msi. Its very important to remember to install the right flavor of the SDK based on your development machine. Make sure you have the 64-bit version installed for a 64-bit machine else the sync framework will not work correctly. [Microsoft SQL Server Compact 3.5 Service Pack 2 for Windows Desktop](http://www.microsoft.com/en-us/download/details.aspx?id=5783) - SSCERuntime-ENU.exe. Please read the information provided on the download page. The above file contains two msi installers. On a 32 bit machine only install the SSCERuntime_x86-ENU.msi file. But on a 64 bit machine you need to install BOTH SSCERuntime_x86-ENU.msi as well as SSCERuntime_x64-ENU.msi files as per the instructions provided. Even if you install this version over SQL CE 4.0, both versions run side-by-side and do not cause any issues. [Microsoft Sync Framework v4.0 Toolkit](http://code.msdn.microsoft.com/Sync-Framework-Toolkit-4dc10f0e) (optional) This is an optional download, we use a particular tool provided in this toolkit for provisioning the database the support synchronization. Please read the download notes to install the pre-requisites required to build these samples. We have provided a pre-built version of the tool in the downloads. [SQL Server Compact Toolbox](http://sqlcetoolbox.codeplex.com/releases) (optional) As mentioned above, Visual Studio 2012 does not connect to SQL CE 3.5 SP2. This Visual Studio 2012 add-in is very useful to help you create and manage SQL CE 3.5 databases from within Visual Studio. ## Getting Started – Database Design The WCF service sample that we will be providing will be independent of any particular application. To explain the working of the code base we are taking a simple application where there are 3 tables Products, Employees and EmployeeSales. The Database diagram for the same is shown below: Figure 1: Database diagram In the attached download file, you can extract the db folder to find a script **SampleSync.sql** as well as backup of the database **SampleSync.bak** (Note: the database backup will only restore to SQL Server 2012, if you have a lower version please apply the script to create the database). You can use the script file to create the above database schema. We are using a very simplified database schema with just 3 table, the schema is pretty self-explanatory. **Products** table will have a list of products that are defined on the server and only fetched on the client end. No updates to products will be made on the client end. **Employees** table too defines the employees on the server, no changes are made to them on the client. Ideally it would contain Employee login information too so that you can automatically determine which employee is making the sale. Finally, we have the **EmployeSales** table which will record the sales of Employee’s, this table will be updated on both client and server and will have to be synchronized both ways. One of the most important factor in designing a database which needs synchronization is to make sure that the primary key is set to **uniqueidentifier** data type. Its crucial since records can be generated on both client and server side and there will be issues in making sure they are unique if you do not use **uniqueidentifier** as the data type. ## Provisioning the Database Before we can set up synchronization we need to provision the MS SQL server side database to support Sync Framework. There are several different ways of doing it and its beyond the scope of this blog post. We choose to use the **SyncSvcUtilUI** tool provided in the Sync Toolkit v4.0 since it provides a visual interface for setting up synchronization. If can setup synchronization using which ever method you prefer, it does not affect the wcf service code. We have provided a pre-built version of the tool in the **SyncSvcUtilUI** folder. There are two scopes we wish to define for our application as given below: - **ProductsEmployees** – This scope will contain the **Products** and **Employees** table and will be used to push data from the server to the client. No changes to these tables will be synced to the server, as per the specifications discussed above. - **EmployeeSales** – This scope will contain filtered scope for **EmployeeSales** table. This scope will allow changes to be synced both ways, to and from the server. Start the **SyncSvcUtilUI** tool and click on **Generate or Edit Sync Configuration** link. Provide the file path to save the sync configuration file with name**SyncConfig** and click **Next** as shown in figure 2. Figure 2: Create a new Sync Configuration file. On the next screen first click the **Add** button to add a new targeted database. Provide the **Config Name** as **SyncSample**, **Db Server** as your SQL Server name, **Db Name** as **SyncSample** and then select **Windows Authentication** or **SQL Authentication** based on your SQL Server configuration. Most important, after you enter the settings click on the **Save** button, if you do not click on the save button then the wizard will not save the values if you just click the **Next** button. Once the database setting is saved click on the **Next** button. Figure 3 shows the database settings. Figure 3: Add database On the Select Scope screen first click on the Add button to add a new scope. We need to define the two scopes as defined above, so provide the Scope Name as **ProductsEmployees** for the first scope and select**Enable Apply Bulk Procedures** checkbox and click **Save** button as seen in Figure 4. The reason why we select Enable Bulk Apply procedures is that it speeds up the synchronization process significantly when we use Bulk Procedures, you could alternatively leave it unchecked if that’s your requirement, it does not affect our services implementation. Figure 4: Add ProductsEmployees scope On the same screen click Add button again to add another scope. Provide the Scope Name as **EmployeeSales** and select **Enable Apply Bulk Procedures** checkbox and click **Save** button as seen in Figure 5. Then click the **Next** button to proceed further. Figure 5: Add EployeeSales scope On the** Select Sync Tables** screen, first select **ProductsEmployees**from the **Select Scope** dropdown. Then click the **Add/Edit** button to open the popup. Select the **SyncSample** database from **Select Database** dropdown. From the list of tables select**Products** and **Employees** table and click **Ok** to close the pop-up and add the tables to the scope. Figure 6: Add tables to ProductsEmployees scope Change the Select Scope dropdown to **EmployeeSales** and click on the **Add/Edit** button again to open table select pop-up. Select **SyncSample** database from the **Select Database** dropdown to populate the tables list. Select the **EmployeeSales** table from the Tables list and click **Ok** to close the pop-up and add the table to scope. Click **Next** to continue after adding tables to both the scope. The last screen shows the XML generated which defines the configuration made by us. Click on the **Finish** button to save the scope configuration and close this wizard. Figure 7 shows the table added to the scope. Figure 7: Define Tables for Scope On the main application screen now select **Provision or Deprovision** to start a new Wizard. On the Settings screen, select the SyncSample.config file that was created previously. This step will actually run scripts on the database to provision our tables to support synchronization. Once the file is loaded, select **ProductEmployees** from the **Select Sync Scope** dropdown and click **Next** button. This will automatically start modifying the database and the status will be shown on the screen. Once the process finishes click on Back button again so that we can provision the other scope too. In case you get an “Invalid Parameter” error while provisioning, please move the sync config file created in steps above to the root drive and then follow the process again. There is a bug in this tool, where if there are any spaces in the path to the sync config file the provisioning fails (*internally this UI application is passing parameters to the command line syncsvcutil application and they are not encapsulating string parameters in quotations, hence if the path contains spaces the command line applications throws an error.*). Figure 8 shows the sync scope selection. Figure 8: Select sync scope for provision Once the previous provisioning is completed, select **EmployeesSales** from **Select Sync Scope** dropdown and click **Next** button to start provisioning for this scope. Once the provisioning is complete, click **Finish** to close the wizard and then close the **SyncSvcUtilUI** application. Our database provisioning process is complete, you can examine the database in SQL management studio to find extra tables and triggers added to track any changes that are made to the synced tables. This completes the database provisioning step. Figure 9 shows the completed provisioning step. Figure 9: Finish Sync Scope provisioning ## Creating Visual Studio 2012 Projects ### 1) Service Interface Fire up Visual Studio 2012 and start a new Project of type Class Library. Enter the project name as **ServiceInterface** and the solution name as **SyncSample** and click **OK** to create the project. Figure 10: Create new Console Project The **ServiceInterface** project will contain a single Interface which will be implemented by both the WCF Web service as well as the client proxy will use the service interface to invoke the web service manually. The interface can also be defined in the web service project and does not need a special project defined (as shown in the Microsoft Samples), but then you would have to reference the web service assembly in your client project exposing your business logic to the client machine which is not a good security decision. In the solution explorer select the default **Class1.cs** and delete it. Then right-click the project name in the solution explorer and select **Add** –> Add **New Item** from the context menu. Select **Interface** from Add new Item dialog and provide the file name **ISyncService.cs** and click **OK** to create the new interface. Before we get started with coding the interface we need to add references to couple of assemblies. In solution explorer, right click **References** and select **Add Reference** from the context menu. Select **Framework** under **Assemblies**, to list all the framework assemblies. Then check assemblies **System.ServiceModel** and **System.Runtime.Serialization** to select them. Next, we need to references to the Sync Framework assemblies. Its important to note that Sync Framework needs platform specific assemblies so if you are working on a 64-bit machine you need to references 64 bit assemblies or if you are on a 32 bit machine then you need to use 32 bit assemblies. Its important to ensure that you check the deployment web server and build platform specific assemblies, else the Sync Framework will not work. Select Browse on the **Add Reference** dialog, navigate to the path where the Sync Framework is installed to reference **Microsoft.Synchronization.dll** and **Microsoft.Synchronization.Data.dll**. On a 64 bit machine these assemblies can be found in the **C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\x64** and**C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x64** folders respectively. If you go one level up you would find the x86 folder containing the 32-bit version of the assemblies. If you are developing on a 32 bit machine then look within the **C:\Program Files\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\x86** and **C:\Program Files\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x86** folders to find these assemblies. Click **OK** to reference the two assemblies in your project. Now copy paste code listing 1 below into the ISyncSerivce.cs interface, save the file and compile the project. ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.Runtime.Serialization; using System.Data; using Microsoft.Synchronization.Data; using Microsoft.Synchronization; namespace ServiceInterface { [ServiceContract(SessionMode = SessionMode.Required)] // Important attribute [ServiceKnownType(typeof(SyncIdFormatGroup))] [ServiceKnownType(typeof(DbSyncContext))] [ServiceKnownType(typeof(SyncSchema))] [ServiceKnownType(typeof(WebSyncFaultException))] [ServiceKnownType(typeof(SyncBatchParameters))] [ServiceKnownType(typeof(GetChangesParameters))] public interface ISyncService { // Defines the first method to call when using SessionMode [OperationContract(IsInitiating = true)] void Initialize(string scopeName); [OperationContract] DbSyncScopeDescription GetScopeDescription(); [OperationContract] void BeginSession(SyncProviderPosition position); [OperationContract] SyncBatchParameters GetKnowledge(); [OperationContract] GetChangesParameters GetChanges(uint batchSize, SyncKnowledge destinationKnowledge); [OperationContract] SyncSessionStatistics ApplyChanges(ConflictResolutionPolicy resolutionPolicy, ChangeBatch sourceChanges, object changeData); [OperationContract] bool HasUploadedBatchFile(string batchFileid, string remotePeerId); [OperationContract] void UploadBatchFile(string batchFileid, byte[] batchFile, string remotePeerId); [OperationContract] byte[] DownloadBatchFile(string batchFileId); [OperationContract] void EndSession(); //Indicates the last method to call when use SessionMode [OperationContract(IsTerminating = true)] void Cleanup(); } [DataContract] public class SyncBatchParameters { [DataMember] public SyncKnowledge DestinationKnowledge; [DataMember] public uint BatchSize; } [DataContract] [KnownType(typeof(DataSet))] public class GetChangesParameters { [DataMember] public object DataRetriever; [DataMember] public ChangeBatch ChangeBatch; } [DataContract] public class WebSyncFaultException { public string message; public Exception innerException; public WebSyncFaultException(string message, Exception innerException) { this.message = message; this.innerException = innerException; } [DataMember] public string Message { get { return this.message; } set { this.message = value; } } [DataMember] public Exception InnerException { get { return this.innerException; } set { this.innerException = value; } } } } ``` Listing 1: ISyncService.cs The code for Listing 1 is from the sample provided by Microsoft, it’s a standard interface definition with methods defined which match the methods called during Synchronization. One key point to note here is the **[ServiceContract(SessionMode = SessionMode.Required)]** attribute on line 13. This attribute forces the web service to enable sessions on server, but its different from ASP.NET sessions. Instances of the WCF web service class which will implement the **ISyncService** interface will remain in memory and will service the same client call. This way objects that are created on the server side in the **Initialize** method, will remain active on the server to respond to further service calls until the **CleanUp** method is called by the client explicitly. Another benefit of enabling Sessions is that WCF guarantees the method calls will respond in the order they were called, making the service behave like a native class rather than a stateless service. The obvious drawback of this is that service instances end up taking more memory on the server while they are executing as compared to stateless services. But this seems to be the only way to get Sync Framework to work on the internet transparently. Besides the **ISyncService** interface there are 3 data classes defined which are basically used to serialize data and exceptions over the wire. ### 2) Web Service Project In solution explorer right click the solution name and **Add –> New Project** from the context menu. Select the **WCF Service Application** template, provide the project name as **SyncService** and click**OK** to add the new project to our solution. In solution explorer select and delete the default IService1.cs as well as Service1.svc files. Again in the solution explorer right click **References** and select **Add Reference** from the context menu. In the **Add Reference** dialog select **Solution** – > **Projects** and select the **ServiceInterface** checkbox to add reference to the project. Select Browse on the **Add Reference** dialog, navigate to the path where the Sync Framework is installed to reference**Microsoft.Synchronization.dll,****Microsoft.Synchronization.Data.dll **and **Microsoft.Synchronization.Data.SqlServer.dll**. On a 64 bit machine these assemblies can be found in the **C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\x64** and**C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x64** folders respectively. If you go one level up you would find the x86 folder containing the 32-bit version of the assemblies. If you are developing on a 32 bit machine then look within the **C:\Program Files\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\x86** and **C:\Program Files\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x86** folders to find these assemblies. Click **OK** to reference the assemblies in your project. Once the references have been added we need to reference the database in the web.config file. In solution explorer, double click on the web.config file to open it and add the connection string section to it as shown in Listing 2. We are using Windows authentication to connect to the local SQL Server instance, you can modify the connection string to correctly point to your database server. ``` ``` Listing 2: Connection String setting in web.config file. Once database connection has been set, let’s add code to this project. Right click the project name in solution explorer and select **Add** –> **Class**. Provide the class name as **ServerSynchronizationHelper.cs** and click **OK **to create the class. This class is a helper class used to connect with the SQL Server database. Copy paste the code from listing 3 below to populate the code for the class. The code for this class is also extracted from the Microsoft Sample, but its refined to remove all CE client provider’s reference. The code below is a simple class which creates and configures an instance of **SqlSyncProvider** object using the provided connection string and scope name. ``` using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; using System.Data; using System.IO; using Microsoft.Synchronization; using Microsoft.Synchronization.Data; using Microsoft.Synchronization.Data.SqlServer; using System.Configuration; namespace SyncService { public class ServerSynchronizationHelper { string conString = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString; /// /// Configure the SqlSyncprovider. Note that this method assumes you have a direct /// conection to the server as this is more of a design time use case vs. runtime /// use case. We think of provisioning the server as something that occurs before /// an application is deployed whereas provisioning the client is somethng that /// happens during runtime (on intitial sync) after the application is deployed. /// /// /// public SqlSyncProvider ConfigureSqlSyncProvider(string scopeName) { SqlSyncProvider provider = new SqlSyncProvider(); provider.ScopeName = scopeName; provider.Connection = new SqlConnection(conString); //create anew scope description and add the appropriate tables to this scope DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription(scopeName); //class to be used to provision the scope defined above SqlSyncScopeProvisioning serverConfig = new SqlSyncScopeProvisioning((SqlConnection)provider.Connection); //determine if this scope already exists on the server and if not go ahead //and provision if (!serverConfig.ScopeExists(scopeName)) { //note that it is important to call this after the tables have been added //to the scope serverConfig.PopulateFromScopeDescription(scopeDesc); //indicate that the base table already exists and does not need to be created serverConfig.SetCreateTableDefault(DbSyncCreationOption.Skip); //provision the server serverConfig.Apply(); } return provider; } } } ``` Listing 3: ServerSynchronizationHelper.cs source code Finally, we need to add the WCF Web service to our project. Right click the project name in solution explorer and select **Add** –>**New Item**. In the Add New Item dialog select **WCF Service** and provide the service name as **SqlWebSyncService.svc** and click **OK** to create the WCF web service.Cope paste the code from listing 4 below into the code for the service. This code is again from the Microsoft Sample and it implements the ISyncService contract we defined above. We also need to delete the auto created **ISqlWebSyncService.cs** interface from solution explorer, since we are not using it. ``` using System; using System.Collections.Generic; using System.Text; using Microsoft.Synchronization; using Microsoft.Synchronization.Data; using Microsoft.Synchronization.Data.SqlServer; using System.IO; using System.ServiceModel; using System.Data.SqlClient; using ServiceInterface; using System.ServiceModel.Activation; namespace SyncService { [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] [AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] public class SqlWebSyncService : ISyncService { protected bool isProxyToCompactDatabase; protected SqlSyncProvider sqlProvider; protected DirectoryInfo sessionBatchingDirectory = null; protected Dictionary batchIdToFileMapper; int batchCount = 0; public void Initialize(string scopeName) { ServerSynchronizationHelper helper = new ServerSynchronizationHelper(); this.sqlProvider = helper.ConfigureSqlSyncProvider(scopeName); this.batchIdToFileMapper = new Dictionary(); } public Microsoft.Synchronization.Data.DbSyncScopeDescription GetScopeDescription() { Log("GetSchema: {0}", this.sqlProvider.Connection.ConnectionString); DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope( this.sqlProvider.ScopeName, (SqlConnection)this.sqlProvider.Connection); return scopeDesc; } public void BeginSession(Microsoft.Synchronization.SyncProviderPosition position) { Log("*****************************************************************"); Log("******************** New Sync Session ***************************"); Log("*****************************************************************"); Log("BeginSession: ScopeName: {0}, Position: {1}", this.sqlProvider.ScopeName, position); //Clean the mapper for each session. this.batchIdToFileMapper = new Dictionary(); this.sqlProvider.BeginSession(position, null/*SyncSessionContext*/); this.batchCount = 0; } public SyncBatchParameters GetKnowledge() { Log("GetSyncBatchParameters: {0}", this.sqlProvider.Connection.ConnectionString); SyncBatchParameters destParameters = new SyncBatchParameters(); this.sqlProvider.GetSyncBatchParameters(out destParameters.BatchSize, out destParameters.DestinationKnowledge); return destParameters; } public GetChangesParameters GetChanges(uint batchSize, Microsoft.Synchronization.SyncKnowledge destinationKnowledge) { Log("GetChangeBatch: {0}", this.sqlProvider.Connection.ConnectionString); GetChangesParameters changesWrapper = new GetChangesParameters(); changesWrapper.ChangeBatch = this.sqlProvider.GetChangeBatch(batchSize, destinationKnowledge, out changesWrapper.DataRetriever); DbSyncContext context = changesWrapper.DataRetriever as DbSyncContext; //Check to see if data is batched if (context != null && context.IsDataBatched) { Log("GetChangeBatch: Data Batched. Current Batch #:{0}", ++this.batchCount); //Dont send the file location info. Just send the file name string fileName = new FileInfo(context.BatchFileName).Name; this.batchIdToFileMapper[fileName] = context.BatchFileName; context.BatchFileName = fileName; } return changesWrapper; } public Microsoft.Synchronization.SyncSessionStatistics ApplyChanges( Microsoft.Synchronization.ConflictResolutionPolicy resolutionPolicy, Microsoft.Synchronization.ChangeBatch sourceChanges, object changeData) { Log("ProcessChangeBatch: {0}", this.sqlProvider.Connection.ConnectionString); DbSyncContext dataRetriever = changeData as DbSyncContext; if (dataRetriever != null && dataRetriever.IsDataBatched) { string remotePeerId = dataRetriever.MadeWithKnowledge.ReplicaId.ToString(); //Data is batched. The client should have uploaded this file to us prior to //calling ApplyChanges. //So look for it. //The Id would be the DbSyncContext.BatchFileName which is just the batch //file name without the complete path string localBatchFileName = null; if (!this.batchIdToFileMapper.TryGetValue(dataRetriever.BatchFileName, out localBatchFileName)) { //Service has not received this file. Throw exception throw new FaultException( new WebSyncFaultException("No batch file uploaded for id " + dataRetriever.BatchFileName, null)); } dataRetriever.BatchFileName = localBatchFileName; } SyncSessionStatistics sessionStatistics = new SyncSessionStatistics(); this.sqlProvider.ProcessChangeBatch(resolutionPolicy, sourceChanges, changeData, new SyncCallbacks(), sessionStatistics); return sessionStatistics; } public bool HasUploadedBatchFile(String batchFileId, string remotePeerId) { this.CheckAndCreateBatchingDirectory(remotePeerId); //The batchFileId is the fileName without the path information in it. FileInfo fileInfo = new FileInfo(Path.Combine( this.sessionBatchingDirectory.FullName, batchFileId)); if (fileInfo.Exists && !this.batchIdToFileMapper.ContainsKey(batchFileId)) { //If file exists but is not in the memory id to location mapper //then add it to the mapping this.batchIdToFileMapper.Add(batchFileId, fileInfo.FullName); } //Check to see if the proxy has already uploaded this file to the service return fileInfo.Exists; } public void UploadBatchFile(string batchFileId, byte[] batchContents, string remotePeerId) { Log("UploadBatchFile: {0}", this.sqlProvider.Connection.ConnectionString); try { if (HasUploadedBatchFile(batchFileId, remotePeerId)) { //Service has already received this file. So dont save it again. return; } //Service hasnt seen the file yet so save it. String localFileLocation = Path.Combine( sessionBatchingDirectory.FullName, batchFileId); FileStream fs = new FileStream(localFileLocation, FileMode.Create, FileAccess.Write); using (fs) { fs.Write(batchContents, 0, batchContents.Length); } //Save this Id to file location mapping in the mapper object this.batchIdToFileMapper[batchFileId] = localFileLocation; } catch (Exception e) { throw new FaultException( new WebSyncFaultException("Unable to save batch file.", e)); } } public byte[] DownloadBatchFile(string batchFileId) { try { Log("DownloadBatchFile: {0}", this.sqlProvider.Connection.ConnectionString); Stream localFileStream = null; string localBatchFileName = null; if (!this.batchIdToFileMapper.TryGetValue(batchFileId, out localBatchFileName)) { throw new FaultException( new WebSyncFaultException("Unable to retrieve batch file for id." + batchFileId, null)); } using (localFileStream = new FileStream(localBatchFileName, FileMode.Open, FileAccess.Read)) { byte[] contents = new byte[localFileStream.Length]; localFileStream.Read(contents, 0, contents.Length); return contents; } } catch (Exception e) { throw new FaultException( new WebSyncFaultException("Unable to read batch file for id " + batchFileId, e)); } } public void EndSession() { Log("EndSession: {0}", this.sqlProvider.Connection.ConnectionString); Log("*****************************************************************"); Log("******************** End Sync Session ***************************"); Log("*****************************************************************"); this.sqlProvider.EndSession(null); Log(""); } public void Cleanup() { this.sqlProvider = null; //Delete all file in the temp session directory if (sessionBatchingDirectory != null) { sessionBatchingDirectory.Refresh(); if (sessionBatchingDirectory.Exists) { try { sessionBatchingDirectory.Delete(true); } catch { //Ignore } } } } protected void Log(string p, params object[] paramArgs) { Console.WriteLine(p, paramArgs); } private void CheckAndCreateBatchingDirectory(string remotePeerId) { //Check to see if we have temp directory for this session. if (sessionBatchingDirectory == null) { //Generate a unique Id for the directory //We use the peer id of the store enumerating the changes so that the //local temp directory is same for a given source //across sync sessions. This enables us to restart a failed sync by not //downloading already received files. string sessionDir = Path.Combine(this.sqlProvider.BatchingDirectory, "WebSync_" + remotePeerId); sessionBatchingDirectory = new DirectoryInfo(sessionDir); //Create the directory if it doesnt exist. if (!sessionBatchingDirectory.Exists) { sessionBatchingDirectory.Create(); } } } } } ``` Listing 4: SqlWebSyncService.Svc.cs We are not going to explain the above code in detail since its provided in the Microsoft samples. You can build the project to test that all the code complies correctly without any errors. We need to deploy the service into a virtual directory before we start its configuration. You can either use IIS Express or choose to deploy the service into a virtual directory. We choose to have the service deployed in its own virtual directory, right click the project name in solution explorer and select **Properties** from the context menu. In the properties screen choose Web and then remove **Use IIS Express** checkbox and click on **Create Virtual Directory** button to create new Virtual Directory and then click on **Save** to save the settings.. See figure 11 for the properties screen settings. Figure 11: Create Virtual Directory Now click on Build item We now need to add the web service configuration to the web.config file, open the web.config file from solution explorer and add the following section as shown in listing 5 to configure the web service. ``` ``` Listing 5: system.serviceModel settings to be added in web.config file The above config section configures the end points for the service. You will have to make some updates to point to the right URL of the service once you deploy on the server. One important point to note here is that for enabling Session support in the web service we have to enable **reliableSession** WCF module. This completes the changes to the wcf service. Its now ready to synchronize against any client providers, as you can see from the above codebase, the WCF service is pretty generic and can be used in any kind of synchronization project. One important step is to make sure that the codebase is compiled in either x86 or x64 based on the platform you plan to deploy this service. We have described this step below, but in case you are just copying the web services codebase ensure to make it compile specific to your deployment platform. ### 3) WPF Client We now add the last part of this project, right click the solution name in solution explorer and select **Add** –> **Add New Project** from the context menu. Select** WPF Application** from the**Add New Project** dialog. Provide the project name as **SyncClient** and click**OK** to create the new project. Again in the solution explorer right click **References** and select **Add Reference** from the context menu. In the **Add Reference** dialog select**Solution** – > **Projects** and select the**ServiceInterface** checkbox to add reference to the project. Then select **Framework** under **Assemblies**, to list all the framework assemblies. Then check assemblies **System.ServiceModel**, **System.ServiceModel.Channels** and **System.Runtime.Serialization** to select them. Now select Browse on the **Add Reference** dialog, navigate to the path where the Sync Framework is installed to reference**Microsoft.Synchronization.dll,****Microsoft.Synchronization.Data.dll **and **Microsoft.Synchronization.Data.SqlCE.dll**. On a 64 bit machine these assemblies can be found in the **C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\x64** and**C:\Program Files (x86)\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x64** folders respectively. If you go one level up you would find the x86 folder containing the 32-bit version of the assemblies. If you are developing on a 32 bit machine then look within the **C:\Program Files\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\x86** and **C:\Program Files\Microsoft SDKs\Microsoft Sync Framework\2.1\Runtime\ADO.NET\V3.1\x86** folders to find these assemblies. We also need to reference SQL CE assembly**System.Data.SqlServerCe.dll**, click on **Browse** again and navigate to the **C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Desktop** folder to select the assembly. This assembly is also platform specific so ensure that you select the right version based on the client platform. Click**OK** to reference the assemblies in your project. Let’s start adding code to our WPF project, right-click the SyncClient project in solution explorer and select Add – > Class from the context menu. Give the class name as RelationalProviderProxy.cs and click ADD to add the class to the project. Copy paste the code as shown below in listing 6 for the RelationalProviderProxy class. ``` using System; using System.Collections.Generic; using System.Text; using Microsoft.Synchronization; using System.ServiceModel; using System.ServiceModel.Channels; using Microsoft.Synchronization.Data; using System.IO; using ServiceInterface; namespace SyncClient { public class RelationalProviderProxy : KnowledgeSyncProvider, IDisposable { protected SyncIdFormatGroup idFormatGroup; protected string scopeName; protected DirectoryInfo localBatchingDirectory; protected bool disposed = false; ISyncService proxy; protected string serviceURL; private string batchingDirectory = Environment.ExpandEnvironmentVariables("%TEMP%"); public string BatchingDirectory { get { return batchingDirectory; } set { if (string.IsNullOrEmpty(value)) { throw new ArgumentException("value cannot be null or empty"); } try { Uri uri = new Uri(value); if (!uri.IsFile || uri.IsUnc) { throw new ArgumentException("value must be a local directory"); } batchingDirectory = value; } catch (Exception e) { throw new ArgumentException("Invalid batching directory.", e); } } } public RelationalProviderProxy(string scopeName, string serviceURL) { this.scopeName = scopeName; this.serviceURL = serviceURL; this.CreateProxy(); this.proxy.Initialize(scopeName); } public override void BeginSession(SyncProviderPosition position, SyncSessionContext syncSessionContext) { this.proxy.BeginSession(position); } public override void EndSession(SyncSessionContext syncSessionContext) { proxy.EndSession(); if (this.localBatchingDirectory != null) { this.localBatchingDirectory.Refresh(); if (this.localBatchingDirectory.Exists) { //Cleanup batching releated files from this session this.localBatchingDirectory.Delete(true); } } } public override ChangeBatch GetChangeBatch(uint batchSize, SyncKnowledge destinationKnowledge, out object changeDataRetriever) { GetChangesParameters changesWrapper = proxy.GetChanges(batchSize, destinationKnowledge); //Retrieve the ChangeDataRetriever and the ChangeBatch changeDataRetriever = changesWrapper.DataRetriever; DbSyncContext context = changeDataRetriever as DbSyncContext; //Check to see if the data is batched. if (context != null && context.IsDataBatched) { if (this.localBatchingDirectory == null) { //Retrieve the remote peer id from the //MadeWithKnowledge.ReplicaId. MadeWithKnowledge is the local //knowledge of the peer that is enumerating the changes. string remotePeerId = context.MadeWithKnowledge.ReplicaId.ToString(); //Generate a unique Id for the directory. //We use the peer id of the store enumerating the changes so //that the local temp directory is same for a given source //across sync sessions. This enables us to restart a failed sync //by not downloading already received files. string sessionDir = Path.Combine(this.batchingDirectory, "WebSync_" + remotePeerId); this.localBatchingDirectory = new DirectoryInfo(sessionDir); //Create the directory if it doesnt exist. if (!this.localBatchingDirectory.Exists) { this.localBatchingDirectory.Create(); } } string localFileName = Path.Combine(this.localBatchingDirectory.FullName, context.BatchFileName); FileInfo localFileInfo = new FileInfo(localFileName); //Download the file only if doesnt exist if (!localFileInfo.Exists) { byte[] remoteFileContents = this.proxy.DownloadBatchFile(context.BatchFileName); using (FileStream localFileStream = new FileStream(localFileName, FileMode.Create, FileAccess.Write)) { localFileStream.Write(remoteFileContents, 0, remoteFileContents.Length); } } //Set DbSyncContext.Batchfile name to the new local file name context.BatchFileName = localFileName; } return changesWrapper.ChangeBatch; } public override FullEnumerationChangeBatch GetFullEnumerationChangeBatch(uint batchSize, SyncId lowerEnumerationBound, SyncKnowledge knowledgeForDataRetrieval, out object changeDataRetriever) { throw new NotImplementedException(); } public override void GetSyncBatchParameters(out uint batchSize, out SyncKnowledge knowledge) { SyncBatchParameters wrapper = proxy.GetKnowledge(); batchSize = wrapper.BatchSize; knowledge = wrapper.DestinationKnowledge; } public override SyncIdFormatGroup IdFormats { get { if (idFormatGroup == null) { idFormatGroup = new SyncIdFormatGroup(); // //1 byte change unit id (Harmonica default before flexible ids) // idFormatGroup.ChangeUnitIdFormat.IsVariableLength = false; idFormatGroup.ChangeUnitIdFormat.Length = 1; // // Guid replica id // idFormatGroup.ReplicaIdFormat.IsVariableLength = false; idFormatGroup.ReplicaIdFormat.Length = 16; // // Sync global id for item ids // idFormatGroup.ItemIdFormat.IsVariableLength = true; idFormatGroup.ItemIdFormat.Length = 10 * 1024; } return idFormatGroup; } } public override void ProcessChangeBatch(ConflictResolutionPolicy resolutionPolicy, ChangeBatch sourceChanges, object changeDataRetriever, SyncCallbacks syncCallbacks, SyncSessionStatistics sessionStatistics) { DbSyncContext context = changeDataRetriever as DbSyncContext; if (context != null && context.IsDataBatched) { string fileName = new FileInfo(context.BatchFileName).Name; //Retrieve the remote peer id from the MadeWithKnowledge.ReplicaId. //MadeWithKnowledge is the local knowledge of the peer //that is enumerating the changes. string peerId = context.MadeWithKnowledge.ReplicaId.ToString(); //Check to see if service already has this file if (!this.proxy.HasUploadedBatchFile(fileName, peerId)) { //Upload this file to remote service FileStream stream = new FileStream(context.BatchFileName, FileMode.Open, FileAccess.Read); byte[] contents = new byte[stream.Length]; using (stream) { stream.Read(contents, 0, contents.Length); } this.proxy.UploadBatchFile(fileName, contents, peerId); } context.BatchFileName = fileName; } SyncSessionStatistics stats = this.proxy.ApplyChanges(resolutionPolicy, sourceChanges, changeDataRetriever); sessionStatistics.ChangesApplied += stats.ChangesApplied; sessionStatistics.ChangesFailed += stats.ChangesFailed; } public override void ProcessFullEnumerationChangeBatch( ConflictResolutionPolicy resolutionPolicy, FullEnumerationChangeBatch sourceChanges, object changeDataRetriever, SyncCallbacks syncCallbacks, SyncSessionStatistics sessionStatistics) { throw new NotImplementedException(); } protected void CreateProxy() { WSHttpBinding binding = new WSHttpBinding(); //BasicHttpBinding binding = new BasicHttpBinding(); binding.ReaderQuotas.MaxArrayLength = 10485760; binding.MaxReceivedMessageSize = 10485760; binding.Security.Mode = SecurityMode.None; binding.ReliableSession.Enabled = true; ChannelFactory factory = new ChannelFactory(binding, new EndpointAddress(serviceURL)); this.proxy = factory.CreateChannel(); } public DbSyncScopeDescription GetScopeDescription() { return this.proxy.GetScopeDescription(); } ~RelationalProviderProxy() { Dispose(false); } public virtual void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!this.disposed) { if (disposing) { if (proxy != null) { CloseProxy(); } } disposed = true; } } /// /// Clean up and close proxy. /// public virtual void CloseProxy() { if (proxy != null) { proxy.Cleanup(); ICommunicationObject channel = proxy as ICommunicationObject; if (channel != null) { try { channel.Close(); } catch (TimeoutException) { channel.Abort(); } catch (CommunicationException) { channel.Abort(); } } proxy = null; } } } } ``` Listing 6: RelationalProviderProxy.cs The code for the **RelationalProviderProxy** class is also from the Microsoft sample, it provides the client side proxy for invoking the WCF web service. Since the WCF web service uses sessions, we can’t rely on Visual Studio to auto create a proxy class for us. Instead we define our own client proxy class which will ultimately call the wcf service and perform synchronization. Next we need to create a SQL CE 3.5 database for the client application. We use the SQL Server Compact Toolbox, Visual Studio plug-in to create the SqlCE database. In visual studio got to **View** menu –>**Other Windows** –> **SQL Server Compact Toolbox** to bring up the toolbox window. Right click on **SQL Server Compact Data Connections** and select **Add SQL Server Compact 3.5 Connection** as shown in figure 12 below. Figure 12: Add SQL Server Compact 3.5 Connection On the **Add SQL Server Compact 3.5** dialog click on **Create** and provide the path to the project to store the SQL CE database in the project folder and the database file name as **ClientDB**. We have provided the path **C:\SystenicsBlog\SyncSample\SyncSample\SyncClient\ClientDB.sdf** to create the database. You can optionally choose to provide a password for your CE database. Click **OK** to create the database, you will also see the database listed in the **SQL Server Compact Toolbox** window. You should follow these steps every time you wish to reset the client database, creating a new one so that it can synchronize with the server and fetch fresh schema. We need to add the path to the client database and the Sync Web Service in the settings file so that we do not hardcode them. In solution explorer expand the **Properties** section under the **SyncClient** project and double click on **Settings.settings** item to open it. Add a new setting named **DBConnection**, **Type** as **Connection String**, **Scope** as **Application** and **Value** as **Data Source=C:\SystenicsBlog\SyncSample\SyncSample\SyncClient\ClientDB.sdf**. Add another setting named **ServiceUrl**, **Type** as **string**, **Scope** as **Application** and **Value** as **http://localhost/SyncService/SqlWebSyncService.svc**. Save the settings, these need to be updated at time of client deployment to point to the folder where the SQL CE database exists and the URL where the WCF service has been hosted. Figure 13: Settings.settings file Once the settings are configured, right click the solution explorer and choose **Add** – > **Class** from the context menu. Provide the class name as **SynchronizationHelper.cs** and click **Add** to add a new class to the project. Copy paste the code from listing 7 below to populate the code for the **SynchronizationHelper** class. ``` using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; using System.Data; using System.Data.SqlServerCe; using System.IO; using Microsoft.Synchronization; using Microsoft.Synchronization.Data.SqlServerCe; using Microsoft.Synchronization.Data; using System.Threading; namespace SyncClient { class SyncResults { private SyncOperationStatistics stats; public SyncOperationStatistics Stats { get { return stats; } set { stats = value; } } private string message; public string Message { get { return message; } set { message = value; } } public SyncResults(string message, SyncOperationStatistics stats) { this.message = message; this.stats = stats; } } class SynchronizationHelper { public void SynchronizeAsync( System.ComponentModel.BackgroundWorker worker, System.ComponentModel.DoWorkEventArgs e) { SyncResults results; results = SynchronizeProductsEmployees(); worker.ReportProgress(0, results); results = SynchronizeEmployeeSales(); worker.ReportProgress(0, results); } public SyncResults SynchronizeProductsEmployees() { SyncResults results = null; // Create the SQL CE Sync Provider for the given scope name SqlCeSyncProvider localProvider = ConfigureCESyncProvider("ProductsEmployees"); // Create the remote provider for the given scope name RelationalProviderProxy destinationProxy = new RelationalProviderProxy("ProductsEmployees", Properties.Settings.Default.ServiceUrl); // Synchronize and collect results results = new SyncResults("ProductsEmployees", SynchronizeProviders(localProvider, destinationProxy, SyncDirectionOrder.Download)); destinationProxy.Dispose(); localProvider.Dispose(); return results; } public SyncResults SynchronizeEmployeeSales() { SyncResults results = null; // Create the SQL CE Sync Provider for the given scope name SqlCeSyncProvider localProvider = ConfigureCESyncProvider("EmployeeSales"); // Create the remote provider for the given scope name RelationalProviderProxy destinationProxy = new RelationalProviderProxy("EmployeeSales", Properties.Settings.Default.ServiceUrl); // Synchronize and collect results results = new SyncResults("EmployeeSales", SynchronizeProviders(localProvider, destinationProxy, SyncDirectionOrder.UploadAndDownload)); destinationProxy.Dispose(); localProvider.Dispose(); return results; } /// /// Utility function that configures a CE provider /// /// /// private SqlCeSyncProvider ConfigureCESyncProvider(string scopeName) { SqlCeConnection sqlCeConnection = new SqlCeConnection( Properties.Settings.Default.DbConnection); SqlCeSyncProvider provider = new SqlCeSyncProvider(); //Set the scope name provider.ScopeName = scopeName; //Set the connection. provider.Connection = sqlCeConnection; //Thats it. We are done configuring the CE provider. return provider; } /// /// Utility function that will create a SyncOrchestrator and /// synchronize the two passed in providers /// /// Local store provider /// Remote store provider /// private SyncOperationStatistics SynchronizeProviders( KnowledgeSyncProvider localProvider, KnowledgeSyncProvider remoteProvider, SyncDirectionOrder direction) { SyncOrchestrator orchestrator = new SyncOrchestrator(); orchestrator.LocalProvider = localProvider; orchestrator.RemoteProvider = remoteProvider; orchestrator.Direction = direction; //Check to see if any provider is a SqlCe provider and if it needs schema CheckIfProviderNeedsSchema(localProvider as SqlCeSyncProvider); SyncOperationStatistics stats = orchestrator.Synchronize(); return stats; } /// /// Check to see if the passed in CE provider needs Schema from server /// /// private void CheckIfProviderNeedsSchema(SqlCeSyncProvider localProvider) { if (localProvider != null) { SqlCeConnection ceConn = (SqlCeConnection)localProvider.Connection; SqlCeSyncScopeProvisioning ceConfig = new SqlCeSyncScopeProvisioning(ceConn); string scopeName = localProvider.ScopeName; //if the scope does not exist in this store if (!ceConfig.ScopeExists(scopeName)) { //create a reference to the server proxy RelationalProviderProxy serverProxy = new RelationalProviderProxy(scopeName, Properties.Settings.Default.ServiceUrl); //retrieve the scope description from the server DbSyncScopeDescription scopeDesc = serverProxy.GetScopeDescription(); serverProxy.Dispose(); //use scope description from server to intitialize the client ceConfig.PopulateFromScopeDescription(scopeDesc); ceConfig.Apply(); } } } } } ``` Listing 7: SynchronizationHelper class The code for listing 7 is also from the Microsoft sample, but we have modified it to just have synchronization code for syncing our CE database with the remote database calling the web service. There are two methods defined **SynchronizeProductsEmployees** and **SynchronizeEmployeeSales** which are used to synchronize our two different scopes that we defined at the start of the blog. The first method only downloads the changes from the server while the second one uploads as well as downloads data between both databases. These methods are invoked from the **BackgroundWorker** thread defined in the **MainWindow** class listed below so that synchronization is performed without blocking the UI thread making the WPF application responsive while synchronization is in progress. The Main WPF app is a simple application with two buttons and a richtextbox control, since the goal here is not to demo WPF capabilities but to showcase synchronization. The **Synchronize** button will synchronize the client SQL CE database with the SQL Server database, bringing down botch schema and data from the server as well as update the main server with any changes made in the **EmployeeSales** table. The **Insert Record** button inserts a new record in **EmployeeSales** table in the local SQL CE database (Please ensure that you have first clicked on **Synchronize** before inserting data else error will be thrown for inserting data into non existent table). After inserting records into the local SQL CE database you can click the **Synchronize** button again to see the newly added record being synchronized with the server, you can then manually check the MS SQL database to find the newly added record. If you make data changes to the MS SQL database and synchronize, you should find the data updated in the SQL CE database locally. This makes the synchronize process pretty pain free once you have it all setup correctly. The listing below show the code for MainWindows.xaml.cs file. ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.ComponentModel; using Microsoft.Synchronization; using System.Data.SqlServerCe; namespace SyncClient { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { // Create a BackgroundWorker object to synchronize without blocking // the UI thread private System.ComponentModel.BackgroundWorker backgroundWorker1; public MainWindow() { InitializeComponent(); this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); this.backgroundWorker1.WorkerReportsProgress = true; // Register the various BackgroundWorker events this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler( this.backgroundWorker1_DoWork); this.backgroundWorker1.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler( this.backgroundWorker1_ProgressChanged); this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler( this.backgroundWorker1_RunWorkerCompleted); } private void btnSync_Click(object sender, RoutedEventArgs e) { // Check if sync is already in progress if (!backgroundWorker1.IsBusy) { msg.AppendText( "Starting Data Synchronization Process...\r\n Please wait till the process compeletes.\r\n"); Application.Current.MainWindow.Cursor = Cursors.Wait; SynchronizationHelper syncHelper = new SynchronizationHelper(); // Start synchronization backgroundWorker1.RunWorkerAsync(syncHelper); } } private void btnInsert_Click(object sender, RoutedEventArgs e) { // Insert a test value in local CE database using (SqlCeConnection con = new SqlCeConnection(Properties.Settings.Default.DbConnection)) { SqlCeCommand cmd = new SqlCeCommand("INSERT INTO [EmployeeSales] ([Id],[ProductId],[EmployeeId],[Unit],[Date])" +" Values (@Id,@ProductId,@EmployeeId,@Unit,@Date)"); cmd.Parameters.Add("@Id", Guid.NewGuid()); //Hardcoded ProductId cmd.Parameters.Add("@ProductId", "F4FC70E6-5DC7-4982-95F0-32E806E21D84"); //Hardcoded EmployeeId cmd.Parameters.Add("@EmployeeId", "0A5F6AD1-F345-48D4-B6D6-0850A7C930C9"); // Hardcoded Units cmd.Parameters.Add("@Unit", 10); cmd.Parameters.Add("@Date", DateTime.Now); cmd.Connection = con; try { con.Open(); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception ed) { MessageBox.Show("Error Occurred while inserting.\r\n" + ed.ToString()); } } } // Method to start syncthonization in background private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { System.ComponentModel.BackgroundWorker worker; worker = (System.ComponentModel.BackgroundWorker)sender; SynchronizationHelper syncHelper = (SynchronizationHelper)e.Argument; syncHelper.SynchronizeAsync(worker, e); } //Method to report synchronization progress private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { SyncResults results = (SyncResults)e.UserState; if (results != null) { DisplayStats(results); } } //Method runs when synchtonization compeletes private void backgroundWorker1_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e) { Application.Current.MainWindow.Cursor = Cursors.Arrow; if (e.Error != null) { msg.AppendText( "An Error has occurred. Please try synchronization later.\r\nThe error:" + e.Error.Message); MessageBox.Show("Error: " + e.Error.Message); } else { msg.AppendText("Synchronization Finished Successfully\r\n"); MessageBox.Show("Finished Synchronization"); } } // Method to format the SyncResults for display private void DisplayStats(SyncResults results) { TimeSpan diff = results.Stats.SyncEndTime.Subtract(results.Stats.SyncStartTime); msg.AppendText( string.Format( "{4}: - Total Time To Synchronize = {0}:{1}:{2}:{3}\r\nTotal Records Uploaded: {5} Total Records Downloaded: {6}\r\n", diff.Hours, diff.Minutes, diff.Seconds, diff.Milliseconds, results.Message, results.Stats.UploadChangesTotal, results.Stats.DownloadChangesTotal)); } } } ``` Listing 8 – MainWindows.xaml.cs Update the c# code as well as XAML code for the default **MainWindow** class copy pasting code from listing 8 and 9. In the above listing you can see that we have used the **BackgroundWorker** object to invoke the WCF services in the background, as there are updates from the WCF server we update the richtextbox with the synchronization results. Listing 9 below shows the XAML for **MainWindow**. ``` Project name

    Hello, world!

    This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.

    Learn more »

    Heading

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    View details »

    Heading

    Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.

    View details »

    Heading

    Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

    View details »


    © Company 2013

    ``` Listing 1: Jumbotron bootstrap sample source code. We need to analyze this source to figure out all its external dependencies like images, style sheets and javascripts to ensure we have that available on our project structure. On analyzing the elements in Listing 1 above we can see that there is a reference to a **favicon.png, ie8-responsive-file-warning.js** and ** jumbotron.css** files which we do not have in our project. The **favicon.png** and **ie8-responsive-file-warning.js** we will omit as its not necessary for this sample, you can provide it and change its path as necessary in your project. The missing **jumbotron.css** file is what we need to add to our project. ### Add new Stylesheet to Umbraco We need to add our custom **jumbotron.css** style sheet into to the project, this style sheet will contains styles which are specific to our site. Right click the **css** folder in the Solution Explorer and select **Add** –>** New Item**to open the Add New Item dialog. Select **Style Sheet** from the templates selection and give the name **jumbotron.css**and click **OK** to create the style sheet file. If you are viewing the source of the jumbotron sample is a browser like chrome, then click **jumbotron.css** file referenced to see its source. Copy paste the code from the css source (as shown in listing 2 below) into the**jumbotron.css** style sheet file open in visual studio. Listing 2 contains all the styles required by our custom website, feel free to update the style sheet as per your requirements. Save the file and we are ready to start building templates in Umbraco. ``` /* Move down content because we have a fixed navbar that is 50px tall */ body { padding-top: 50px; padding-bottom: 20px; } ``` Listing 2: Jumbotron.css style sheet ## Creating the Site base Document Type Now that we have addressed all the external dependencies of the site, its time to start working on the Umbraco templates. Run the Umbraco project in Visual Studio, it will launch the site in the default browser and inform you that site needs to be setup. Click on the **Setup your new website** button to be redirected to Umbraco administration site. Provide the credentials Username: **root** and Password: **@123test** (if you are using code from my previous sample) to login to the administration control panel. The first step for creating a new site is to create a new **Document Type** in Umbraco. Umbraco allows you to nest Document Types, its an important feature to ensure that common properties for all documents are defined at the base document level so that they are reused in child document types. Its very similar to the master page concept in ASP.NET, but different given the fact that master pages deal with layouts (which are similar to the Templates concept in Umbraco) while document types deal with defining properties that will be available for the CMS Content Editor to edit. In our case there are three properties that we need to define on the base document type: **SEO Title**,** SEO Description** and **umbracoNaviHide**. The first two properties are self explanatory and will map to title and description meta tag in the content header. The 3rd property is specific named Umbraco property. Basically if you set the **umbracoNaviHide** property on any of the content pages it will make the page invisible from the navigation menu’s even though the page remains published. This property is optional, but I find it a good practice to include it since there are pages like Sitemap which need not show up in the navigation menu but at the same time they are required. Click on **Settings** –>**Document Type (…)** –> **+ Create** as shown in figure 4 below to create a new Document Type. Figure 4: Create new Document Type In the **Create** dialog provide the **Name** as**[PageBase]** and click **Create** to create the Document Template as well as a matching Template with the same name as shown in figure 5. The Template will be used as our Master Layout. Figure 5: Create new [PageBase] document type and Template The **[Pagebase]** document type will open in the editor. Switch to the **Generic properties** tab and click on the **Click here to add a new property** link to add the 3 properties as listed below and **save**them. Figures 6 to 8 show them being added. Name: SEO Title Alias: sEOTitle Type: Textstring Figure 6: SEO Title Property Name: SEO Description Alias: sEODescription Type: textbox multiple Figure 7: SEO Description Property Name: umbracoNaviHide Alias: umbracoNaviHide Type: True/false Figure 8: UmbracoNaviHide property Now that we have our base page setup we need to create Partial View for our Site Navigation Header so that we can include it into our **[PageBase]** template. Right click **Partial Views** under **Settings** and select **Create** from the menu. In the **Create** dialog give the **Name** as **Navigation** and click **Create** to create the Partial view and open its editor. Copy paste the code from listing 3 below into the editor and click the **Save** button to save the partial view. ``` @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @* Macro to display child pages below the root page of a standard website. Also highlights the current active page/section in the navigation with the css class "current". *@ @{ @*Get the root of the website *@ var root = CurrentPage.AncestorOrSelf(1); } ``` Listing 3: Navigation Partial View The above listing uses the Bootstrap Navigation bar component to build the navigation menu. We loop over all published and visible pages in Umbraco to build the dynamic navigation menu. You can see that rest of the HTML code is copied from the Jumbotron source which we had opened in the browser. Under **Settings**, expand **Templates** node and click on the** [PageBase]** template to open it in Umbraco editor. This template was automatically created when we created the Document Type with the same name. This template will server as our Master Layout template. Copy Paste code from listing 4 into the editor and click the **Save** button to save the template in Umbraco. ``` @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @{ Layout = null; } @Umbraco.Field("sEOTitle") @Html.Partial("Navigation", @Model.Content)
    @RenderSection("jumbotron")
    @RenderSection("content")

    © Systenics Solutions 2013

    ``` Listing 4: [PageBase] template In the above listing I have defined a HTML5 based responsive template using Bootstrap classes where necessary. If you compare the code from Listing 3 below with the source from Listing 1 you will find that I have kept the HTML which will repeat on all pages in the**[PageBase]** template and the home page specific HTML has been replaced by RenderSection razor commands which will be rendered from the child templates. I have also changed the path for all local CSS and JavaScript files so that they point to the right local folder. The appropriate Bootstrap style sheets and JavaScripts have also been included into the template file. You will also find that I am using the Umbraco Field method to define the SEO Title and SEO Description properties that we defined on the **[PageBase]** document type on the page. Now we need to define the Home Page document type, expand the **Document Types** node under **Settings**. Right click on the **[PageBase]** node and select **Create** from the menu. Provide the document name as **Home** and *uncheck* the **Create Matching template** checkbox and click **Create** button to create the **Home** document type under the **[PageBase]** document. We create it under the **[PageBase]** document so that it can inherit properties defined in the base document. Switch to the **Structure** tab and select **Yes** for **Allow at root**so that Home page can be the root of the site. **Save** the setting and switch to the **Tabs** tab so that we can define the tabs required for the Homepage. Add 2 new tabs named **Primary Message** and **Secondary Message** by entering the tab name and clicking**New Tab** button. Switch to the **Generic Properties** tab and add the following properties. These properties have been defined looking at the Jumbotron example and every bit of information that we want to be editable on the Home page needs to be defined as a property in the document type definition. Name: homePrimaryMessageTitle Alias: homePrimaryMessageTitle Type: Textstring Tab: Primary Message Name: homePrimaryMessageContent Alias: homePrimaryMessageContent Type: Richtext editor Tab: Primary Message Name: homePrimaryLink Alias: homePrimaryLink Type: Content Picker Tab: Primary Message Name: homeSecondaryMessageTitle1 Alias: homeSecondaryMessageTitle1 Type: Textstring Tab: Secondary Message Name: homeSecondaryMessageContent1 Alias: homeSecondaryMessageContent1 Type: Richtext editor Tab: Secondary Message Name: homeSecondaryMessageLink1 Alias: homeSecondaryMessageLink1 Type: Content Picker Tab: Secondary Message Name: homeSecondaryMessageTitle2 Alias: homeSecondaryMessageTitle2 Type: Textstring Tab: Secondary Message Name: homeSecondaryMessageContent2 Alias: homeSecondaryMessageContent2 Type: Richtext editor Tab: Secondary Message Name: homeSecondaryMessageLink2 Alias: homeSecondaryMessageLink2 Type: Content Picker Tab: Secondary Message Name: homeSecondaryMessageTitle3 Alias: homeSecondaryMessageTitle3 Type: Textstring Tab: Secondary Message Name: homeSecondaryMessageContent3 Alias: homeSecondaryMessageContent3 Type: Richtext editor Tab: Secondary Message Name: homeSecondaryMessageLink3 Alias: homeSecondaryMessageLink3 Type: Content Picker Tab: Secondary Message Once you have saved all the properties your properties definition for the **Home** document type should look like figure 9 below. Figure 9: Home document type properties Now let’s define the matching **Home** template so that we have appropriate containers defined to display the properties that have been added by us. Expand the **Templates** node under **Settings** and right click on the existing **[PageBase]** template and select **Create** from the menu to create a new template using**[PageBase]** as the master template. Enter the template name as **Home** and click **Create** button to create it. You will see that the new template uses the**[PageBase]** template as the master page template. Copy paste the code from Listing 5 below into the editor for **Home** template and click the**Save** button to save the template. ``` @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @{ Layout = "PageBase.cshtml"; } @section jumbotron{

    @Umbraco.Field("homePrimaryMessageTitle")

    @Umbraco.Field("homePrimaryMessageContent")

    Learn more »

    } @section content{

    @Umbraco.Field("homeSecondaryMessageTitle1")

    @Umbraco.Field("homeSecondaryMessageContent1")

    View details »

    @Umbraco.Field("homeSecondaryMessageTitle2")

    @Umbraco.Field("homeSecondaryMessageContent2")

    View details »

    @Umbraco.Field("homeSecondaryMessageTitle3")

    @Umbraco.Field("homeSecondaryMessageContent3")

    View details »

    } ``` Listing 5: Home template The above listing 5 lays out the appropriate HTML elements using Bootstrap styles and also uses Umbraco **Field** razor to provide placeholder for content that will be provided by the end user. Now that we have the **Home** template setup we need to update the **Home** document type so that it uses this template by default. Expand **Document Types** under **Settings** and then select the **Home** document type. Under the **Info** tab, **Default Template** choose **Home** from the drop down list and click **Save** button. Now we are all set to build our content page for the **Home** document type. Click on **Content** icon, right click on **Content** and click on **Home** from the menu to create a new **Home** page as shown in figure 10. Figure 10: Add Home page This action will create a new content page with the Home document type. Provide the **Name** as **Home** and fill up the properties for the page. The properties that we defined in the Home document type are shown as tabs. These same tabs will be available to your content editors to edit content for the page. As you can see the content page really hides the inner implementation details of the page and just presents the user with a friendly view to edit content as per their requirements. The power of Umbraco CMS shines in this aspect where you are given totally liberty to define the tabs and its editable properties so that the content is presented to content editors in a format they understand rather than training the content editors to understand the limited structure other CMS systems provide. Fill up the content of each of the **Home** page tabs and save them as you proceed. Its important that you also fill up the **SEO Title** and **SEO Description** properties on the **Properties** tab. You can see that even though these properties were defined on the**[PageBase]** document type, they have been inherited by the**Home** document type. Once you have filled all the information, click on the Save and Publish button to publish the page and make it available for everyone to view as shown in Figure 11 below. Figure 11: Save home page properties Figure 11 shows the unpublished view of the **Home** content page. Once the page is published you can see that Umbraco has provided a published date as well as path to view the published page. If you click on that path or access the Umbraco website Url in a new browser you will be able to view the final result of the responsive website. You can use the**Responsive Design View** tool available in latest version of**FireFox** browser to test the responsive capabilities of the site. Figures 12 to 14 show the Home page rendered in different browser sizes. Figure 12: 320x480 Mobile view of the Home page Figure 13: 768x1024 Tablet View Figure 14: Full HD 1900x1080 view The above 3 figures show the mobile, tablet and desktop view of the responsive Home page. You can see how the page menu automatically changes to an icon on the mobile screen (Figure 12,13) and other content elements are also laid out one below another on the mobile browser. You can see similar fluid changes between the tablet and desktop screen sizes. ## Summary In this blog post I have integrated the popular Bootstrap framework into Umbraco 7 CMS. I have covered all the steps related to integration as well as building your first responsive, fluid Home page in Umbraco 7. This blog post should serve as a starting point for anyone interested in building responsive fluid layouts on Umbraco 7. In future blog posts I plan to extend on this sample adding more features. ## Download [Click here](https://www.systenics.com/media/CreatingResponsiveBootstrapUmbraco7.zip) to download the sample used in this article. ## Related pages on Systenics - [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Create a Responsive, Fluid HTML5/CSS3 based website on Umbraco 6 using Twitter Bootstrap URL: https://www.systenics.com/blogs/create-a-responsive-fluid-html5css3-based-website-on-umbraco-6-using-twitter-bootstrap/ Description: Building responsive, fluid HTML5/CSS3 based websites are a rage these days delivering the best ROI for clients investing in building new web sites. Building a single website which adapts itself depending on the device screen size gives end users richer experiences. There are several ways of building responsive websites, one of the popular ways to to use an existing framework like Bootstrap from Twitter which provide base scaffolding to quickly build responsive websites. In this blog post I am going to focus on how to integrate Twitter Bootstrap with Umbraco 6 and MVC/Razor display engine to build a HTML5/CSS3 based responsive website. The goal is to build a simple single page responsive website similar to the fluid bootstrap sample and focus on the integration part so that you can build more complex layouts as required. I plan to build upon this sample in future blog posts. # Create a Responsive, Fluid HTML5/CSS3 based website on Umbraco 6 using Twitter Bootstrap **by:** Saurabh Nandu **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*ASP.NET MVC*](https://www.systenics.com/blogs/tag/aspnet-mvc/), [*Razor*](https://www.systenics.com/blogs/tag/razor/), [*Umbraco*](https://www.systenics.com/blogs/tag/umbraco/), [*Bootstrap*](https://www.systenics.com/blogs/tag/bootstrap/) Building responsive, fluid HTML5/CSS3 based websites are a rage these days delivering the best ROI for clients investing in building new web sites. Building a single website which adapts itself depending on the device screen size gives end users richer experiences. There are several ways of building responsive websites, one of the popular ways to to use an existing framework like Bootstrap from Twitter which provide base scaffolding to quickly build responsive websites. In this blog post I am going to focus on how to integrate **Twitter Bootstrap** with Umbraco 6 and MVC/Razor display engine to build a HTML5/CSS3 based responsive website. The goal is to build a simple single page responsive website similar to the fluid [bootstrap sample](http://twitter.github.io/bootstrap/examples/fluid.html) and focus on the integration part so that you can build more complex layouts as required. I plan to build upon this sample in future blog posts. I am aware that there exists a Bootstrap package for Umbraco, but I found that it has not been updated in a while so I choose to start with a blank slate. I this blog post I am assuming that you have already setup [Umbraco 6 with MVC](https://www.systenics.com/blogs/setting-up-umbraco-6-in-visual-studio-2012-for-mvc-development/) as explained in the last blog post. The Visual Studio 2012 project that I am using is already provided as a download in the previous article. ## Getting Started with Bootstrap integration Once you have the Visual Studio 2012 project ready, head over to the [Bootstrap website](http://twitter.github.io/bootstrap/index.html) to [download](http://getbootstrap.com/2.3.2/) its zip file. Bootstrap provides a wide variety of [customization](https://www.systenics.com/auctionworx/development-and-customization/) options, for the purpose of this article I am just using the default download, feel free to customize your download as required. Extract the zip file to a temporary folder so that its contents are available for us to import into Umbraco. You can learn more about the files included in the bootstrap zip from [here](http://twitter.github.io/bootstrap/getting-started.html#file-structure), for the purpose of this blog I will focus on using only the required files and minified versions of the same, since I do not intend to customize the default Bootstrap scripts. Run (Ctrl+F5) the Umbraco project from within Visual Studio to launch it in the browser so that we can start importing the bootstrap items into our project. If you have not created any content in your Umbraco then you will be presented with the default **Set up your website** button and click on it to login to the admin site (credentials for the admin site are given in the [previous article](https://www.systenics.com/blogs/setting-up-umbraco-6-in-visual-studio-2012-for-mvc-development/)). In case you already have a site setup, then navigate to [http:///Umbraco](http://sitename/Umbraco) to login into Umbraco admin by providing your credentials. We need to import the Bootstrap JavaScript and CSS files into our project so that we can use them. In Visual Studio Solution Explorer window right click the project name and select**Add – > New Folder** from the context menu and give the name **css** to the new folder (if one does not already exist). Umbraco by default imports all style sheet files stored in this folder. Right click the **css** folder in Solution Explorer and select **Add** –> **Existing Item** from the context menu, navigate to the folder where you have extracted the boostrap files and select both **bootstrap.min.css** and **bootstrap-responsive.min.css** files from the **css** folder. This step will import the boostrap style sheets into your Visual Studio project as well as into Umbraco. Now right click the **scripts** folder in Solution Explorer and select**Add** –> **Existing Item** from the context menu, navigate to the folder where you have extracted the bootstrap files and select **bootstrap.min.js** file from the **js** folder. This step will import the bootstrap JavaScript file into Visual Studio as well as Umbraco. This completes our integration of Bootstrap into Umbraco we now move on to building our simple responsive website. ## Building Our Responsive, Fluid Sample The simple website that I plan to build will have single Homepage as shown in the [bootstrap sample](http://twitter.github.io/bootstrap/examples/fluid.html). Before you being building any website in Umbraco its very important to identify the sites structure followed by the structure of each page. Its essential that this information is thought through before hand so that its easier to arrange the Umbraco doctypes and templates accordingly. Figure 1 displays the layout for the Home page. Figure 1 – Published Responsive Bootstrap enabled Umbraco website As you can see from Figure 1 above the page has three distinct areas primary message, 3 secondary messages and a sidebar. Both the Primary Message and Secondary Message areas have title and content areas. Once we have fixed the areas of the page we will define them as editable below so that the content editors can edit the appropriate content based on the structure of the page and not worry about its display format. To get started with the custom editing, we need to add our custom site-specific style sheet into to the project, this style sheet will contains styles which are specific to our site. Right click the **css** folder in the Solution Explorer and select **Add** –>**New Item** to open the Add New Item dialog. Select **Style Sheet** from the templates selection and give the name **site.css** and click**OK** to create the style sheet file. Copy paste the code from listing 1 below into the **site.css** style sheet file open in visual studio. Listing 1 contains all the styles required by our custom website, feel free to update the style sheet as per your requirements. ``` body { padding-top: 60px; padding-bottom: 40px; } .sidebar-nav { padding: 9px 0; } @media (max-width: 980px) { /* Enable use of floated navbar text */ .navbar-text.pull-right { float: none; padding-left: 5px; padding-right: 5px; } } ``` Listing 1: site.css custom style sheet ### Creating the Site base Document Type Umbraco allows you to nest Document Types, its an important feature to ensure that common properties for all documents are defined at the base document level so that they are reused in child document types. Its very similar to the master page concept in ASP.NET but different given the fact that master pages deal with layouts (which are similar to the Templates concept in Umbraco) while document types deal with defining properties that will be available for the CMS Content Editor to edit. In our case there are three properties that we need to define on the base document type: SEO Title, SEO Description and umbracoNaviHide. The first two properties are self explanatory and will map to title and description meta tag in the content header. The 3rd property is specific named Umbraco property. Basically if you set the umbracoNaviHide property on any of the content pages it will make the page invisible from the navigation menu’s even though the page remains published. This property is optional but I find it a good practice to include it since there are pages like Sitemap which need not show up in the navigation menu but at the same time they are required. In the web browser go to the Umbraco administration portal. Select **Settings** from the **Sections** as shown in figure 2 below. Figure 2: Umbraco Admin Settings Right click on **Document Types** under **Settings** and select **Create** from the context menu (as shown in figure 3) to create a new Document Type. Figure 3: Create new Document Type In the **Create** dialog provide the **Name** as**[PageBase]** and click **Create** to create the Document Template as well as a matching Template with the same name as shown in figure 4. The Template will be used as our Master Layout. Figure 4: Create Base Document Type The **[Pagebase]** document type will open in the editor. Switch to the **Generic properties** tab and click on the **Click here to add a new property** bar to add the 3 properties as listed below and **save** them. Figures 5 to 7 show them being added. Name: SEO Title Alias: sEOTitle Type: Textstring Figure 5: SEO Title Property Name: SEO Description Alias: sEODescription Type: textbox multiple Figure 6: SEO Description property Name: umbracoNaviHide Alias: umbracoNaviHide Type: True/false Figure 7: umbracoNaviHide property Now that we have our base page setup we need to create Partial View for our Site Navigation Header so that we can include it into our **[PageBase]** template. Right click **Partial Views** under **Settings** and select **Create** from the context menu. In the **Create** dialog give the **Name** as **Navigation** and click **Create** to create the Partial view and open its editor. Copy paste the code from listing 2 below into the editor and click the Save icon to save the partial view. ``` @inherits Umbraco.Web.Mvc.UmbracoViewPage @{ Layout = null; var parent = Model.AncestorOrSelf(1); string classSelectedMenuItem = ""; // Special Handling for Home page if(Model.Name == parent.Name) { classSelectedMenuItem = "active"; } } ``` Listing 2: NavigationHeader partial view The above listing uses the Bootstrap Navigation bar to build the navigation menu. We loop over all published and visible pages in Umbraco to build the dynamic navigation menu. Under **Settings**, expand **Templates** node and click on the**[PageBase]** template to open it in Umbraco editor. This template with automatically created when we created the Document Type with the same name. This template will server as our Master Layout template. Copy Paste code from listing 3 into the editor and click the **Save** icon to save the template in Umbraco. ``` @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @{ Layout = null; } @Umbraco.Field("sEOTitle")
    @RenderSection("Content")

    © Systenics Solutions 2013

    ``` Listing 3 - [PageBase] template In the above listing I have defined a HTML5 based responsive template using Bootstrap classes where necessary. The appropriate Bootstrap style sheets and JavaScripts have also been included into the template file. I have defined one section **Content** on the page which will be replaced by appropriate child pages. You will also find that I am using the Umbraco Field method to define the SEO Title and SEO Description properties that we defined on the **[PageBase]** document type on the page. Now we need to define the Home Page document type, expand the **Document Types** node under **Settings**. Right click on the **[PageBase]** node and select **Create** from the context menu. Provide the document name as **Home** and *uncheck* the **Create Matching template** checkbox and click **Create** button to create the **Home** document type under the **[PageBase]** document. We create it under the **[PageBase]** document so that it can inherit properties defined in the base document. Switch to the **Structure** tab and select **Yes** for **Allow at root** so that Home page can be the root of the site. **Save** the setting and switch to the **Tabs** tab so that we can define the tabs required for the Homepage. Add 3 new tabs named **Primary Message**, **Secondary Message** and **Sidebar** by entering the tab name and clicking **New Tab** button. Switch to the **Generic Properties** tab and add the following properties. Name: homePrimaryMessageTitle Alias: homePrimaryMessageTitle Type: Textstring Tab: Primary Message Name: homePrimaryMessageContent Alias: homePrimaryMessageContent Type: Richtext editor Tab: Primary Message Name: homeSecondaryMessageTitle1 Alias: homeSecondaryMessageTitle1 Type: Textstring Tab: Secondary Message Name: homeSecondaryMessageContent1 Alias: homeSecondaryMessageContent1 Type: Richtext editor Tab: Secondary Message Name: homeSecondaryMessageTitle2 Alias: homeSecondaryMessageTitle2 Type: Textstring Tab: Secondary Message Name: homeSecondaryMessageContent2 Alias: homeSecondaryMessageContent2 Type: Richtext editor Tab: Secondary Message Name: homeSecondaryMessageTitle3 Alias: homeSecondaryMessageTitle3 Type: Textstring Tab: Secondary Message Name: homeSecondaryMessageContent3 Alias: homeSecondaryMessageContent3 Type: Richtext editor Tab: Secondary Message Name: homeSidebar Alias: homeSidebar Type: Richtext editor Tab: Secondary Message Once you have saved all the properties your properties definition for the **Home** document type should look like figure 8 below. Figure 8: Properties defined for Home document type Now let’s define the matching **Home** template so that we have appropriate containers defined to display the properties that have been added by us. Expand the **Templates** node under **Settings** and right click on the existing **[PageBase]** template and select **Create** from the context menu to create a new template using **[PageBase]** as the master template. Enter the template name as **Home** and click **Create** button to create it. You will see that the new template uses the**[PageBase]** template as the master page template. Copy paste the code from Listing 4 below into the editor for **Home** template and click the **Save** icon to save the template. ``` @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @{ Layout = "PageBase.cshtml"; } @section content{

    @Umbraco.Field("homePrimaryMessageTitle")

    @Umbraco.Field("homePrimaryMessageContent")

    @Umbraco.Field("homeSecondaryMessageTitle1")

    @Umbraco.Field("homeSecondaryMessageContent1")

    @Umbraco.Field("homeSecondaryMessageTitle2")

    @Umbraco.Field("homeSecondaryMessageContent2")

    @Umbraco.Field("homeSecondaryMessageTitle3")

    @Umbraco.Field("homeSecondaryMessageContent3")
    } ``` Listing 4 – Home template The above listing 4 lays out the appropriate HTML elements using Bootstrap styles and also uses Umbraco **Field** method to provide placeholder for content that will be provided by the end user. Now that we have the **Home** template setup we need to update the **Home** document type so that it uses this template by default. Expand **Document Types** under **Settings** and then select the **Home** document type. Under the **Info** tab, **Default Template** choose **Home** from the drop down list and click **Save** icon. Now we are all set to build our content page for the **Home** document type. Click on **Content** icon (figure 2) under **Sections** and from the top tree view right click on **Content** under**Content** title and select **Create** from the context menu. Provide the **Name** as **Home** and select the **Document Type****Home** and click on **Create** button to create the new content as shown in figure 9. Figure 9 – Create Home content page You will see that the Home content page is created but unpublished (indicated by the greyed out icon for the page – figure 10) and you are presented with tab to fill up the content for the page. These same tabs will be available to your content editors to edit content for the page. As you can see the content page really hides the inner implementation details of the page and just presents the user with a friendly view to edit content as per their requirements. The power of Umbraco CMS shines in this aspect where you are given totally liberty to define the tabs and its editable properties so that the content is presented to content editors in a format they understand rather than training the content editors to understand the limited structure other CMS systems provide. Fill up the content of each of the **Home** page tabs and save them as you proceed. Its important that you also fill up the **SEO Title** and **SEO Description** properties on the **Properties** tab. You can see that even though these properties were defined on the **[PageBase]** document type, they have been inherited by the **Home** document type. Once you have filled all the information, click on the Save and Publish icon (circled red in Figure 10) to publish the page and make it available for everyone to view. Figure 10 – Unpublished Home content page Figure 10 shows the unpublished view of the **Home** content page. Once the page is published you can see that Umbraco has provided a published date as well as path to view the published page. If you click on that path or access the Umbraco website Url in a new browser you will be able to view the final result of the responsive website. You can use the **Responsive Design View** tool available in latest version of **FireFox** browser to test the responsive capabilities of the site. Figures 11 to 13 show the Home page rendered in different browser sizes. Figure 11 – 320x480 Mobile view of the Home page Figure 12 – 786x1024 Tablet view of the Home page Figure 13 – 1280x600 Desktop view of the Home page The above 3 figures show the mobile, tablet and desktop view of the responsive Home page. You can see how the page menu automatically changes to an icon on the mobile screen (Figure 11,12) and other content elements are also laid out one below another on the mobile browser. You can see similar fluid changes between the tablet and desktop screen sizes. ## Summary In this blog post I have integrated the popular Twitter Bootstrap framework into Umbraco 6 CMS. I have covered all the steps related to integration as well as building your first responsive, fluid Home page in Umbraco 6. This blog post should serve as a starting point for anyone interested in building responsive fluid layouts on Umbraco 6. In future blog posts I plan to extend on this sample adding more features. ## Download [Click here](https://www.systenics.com/media/CreatingResponsiveBootstrapUmbraco6.zip) to download the sample used in this article. ## Related pages on Systenics - [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Create a Grid View with paging and sorting feature using ASP.NET MVC Razor and LINQ URL: https://www.systenics.com/blogs/create-a-grid-view-with-paging-and-sorting-feature-using-aspnet-mvc-razor-and-linq/ Description: Recently, I came across a requirement to create a Grid View with paging and column sorting feature. Since, I was using ASP.NET MVC there was no server side control such as Repeater, GridView or DataList which are available in ASP.NET. I googled but didn’t come across a good solution except few third-party paid ASP.NET MVC controls. So finally I decided to code my own Grid View with support for paging and column sorting with help from information available on blogs and forums. Even though I am showing the code in context of an example its extensible enough to reuse it elsewhere. # Create a Grid View with paging and sorting feature using ASP.NET MVC Razor and LINQ **by:** Ravindra Parcha **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*C#*](https://www.systenics.com/blogs/tag/c-sharp/), [*ASP.NET MVC*](https://www.systenics.com/blogs/tag/aspnet-mvc/) Recently, I came across a requirement to create a Grid View with paging and column sorting feature. Since, I was using ASP.NET MVC there was no server side control such as Repeater, GridView or DataList which are available in ASP.NET. I googled but didn't come across a good solution except few third-party paid ASP.NET MVC controls. So finally I decided to code my own Grid View with support for paging and column sorting with help from information available on blogs and forums. Even though I am showing the code in context of an example its extensible enough to reuse it elsewhere. ## Prerequisites Visual Studio 2012 Entity Framework LocalDb (to deploy the database or you can use SQL Server) ## Key Features 1. Provide Previous/Next button at the bottom of the grid. 2. Provide drop down list to directly jump to any page. 3. Click on column name to sort data. 4. Show current page number and total pages. In this example, I am using the list of countries to demonstrate paging and column sorting feature. Listing 1: Screenshot of Grid View with support for paging and column sorting ## Let's start coding Before looking at the actual implementation of paging and sorting in Grid View, let's start by creating a ViewModel which allow us to customize the data to be viewed and control different aspects of our Grid View. I am using Entity Framework 5, code-first model. Listing 2: CountryViewModel.cs ``` public class CountryTypeViewModel { public List CountryList { get; set; } public int CurrentPage; public int pageSize; public double TotalPages; public int sortBy; public bool isAsc; public string Search; public int isLastRecord; public int Count; } public class CountryViewModel { public int CountryID { get; set; } public string Name { get; set; } public string Region { get; set; } } ``` The class CountryViewModel is a ViewModel that shows only specific columns instead of displaying all the columns defined in the table. A list of CountryViewModel and other properties related to paging and column sorting used in Grid View is defined under CountryTypeViewModel class. Let's take a look at the action in Controller for Grid View. Listing 3: GridViewController.cs ``` public CountryTypeViewModel GetCountry(int page = 1, int sortBy = 1, bool isAsc = true, bool isPaging = false) { CountryDBContext db = new CountryDBContext(); int pageSize = Convert.ToInt16(ConfigurationManager.AppSettings["PageSize"]); IEnumerable countryList = null; CountryTypeViewModel obj = new CountryTypeViewModel(); string sortColumn = string.Empty; #region SortingColumn switch (sortBy) { case 1: if (isAsc) sortColumn = "CountryID"; else sortColumn = "CountryID Desc"; break; case 2: if (isAsc) sortColumn = "Name"; else sortColumn = "Name Desc"; break; case 3: if (isAsc) sortColumn = "Region"; else sortColumn = "Region Desc"; break; } #endregion if (!isPaging) { countryList = (from p in db.CountryList select new CountryViewModel { CountryID = p.CountryID, Name = p.Name, Region = p.Region }).OrderBy(sortColumn).ToList(); obj.TotalPages = countryList.Count(); } else if (isPaging) { countryList = (from p in db.CountryList select new CountryViewModel { CountryID = p.CountryID, Name = p.Name, Region = p.Region }).OrderBy(sortColumn).Skip((page - 1) * pageSize).Take(pageSize + 1).ToList(); } obj.CurrentPage = page; obj.pageSize = pageSize; obj.sortBy = sortBy; obj.isAsc = isAsc; if (countryList.Count() <= pageSize) obj.isLastRecord = 2; if (obj.isLastRecord != 2) { if (countryList.Count() <= pageSize) obj.isLastRecord = 1; else obj.isLastRecord = 0; } obj.CountryList = countryList.Take(pageSize).ToList(); return obj; } ``` The method GetCountry is invoked from Index and CountryList actions. An IEnumerable of type CountryViewModel is defined which ultimately hold the list of all countries. A switch-case block is used which identifies the column number using isAsc variable and sorts using with the help of extension method accordingly. Also, depending on the current page and page size set from web.config, the LINQ query will select only specific records. Listing 4: LINQ query to fetch specific records (GridViewController.cs) ``` countryList = (from p in db.CountryList select new CountryViewModel { CountryID = p.CountryID, Name = p.Name, Region = p.Region }).OrderBy(sortColumn).Skip((page - 1) * pageSize).Take(pageSize + 1).ToList(); ``` Listing 5: Index action method code when page loads for the first time ``` public ActionResult Index() { CountryTypeViewModel obj = new CountryTypeViewModel(); obj = GetCountry(1, 1, true, false); List PageCount = new List(); for (int i = 1; i <= Math.Ceiling(obj.TotalPages / obj.pageSize); i++) PageCount.Add(i.ToString()); ViewBag.TotalCountDropDown = new SelectList(PageCount.ToList()); ViewBag.SelectPageIndex = 1; return View(obj); } ``` Listing 6: CountryList action method called when next or previous button is clicked ``` public ActionResult CountryList(int page = 1, int sortBy = 1, bool isAsc = true, string TotalCount = null, string SelectPageIndex = null) { CountryTypeViewModel obj = new CountryTypeViewModel(); bool isPaging = false; if (page > 1) isPaging = true; if (SelectPageIndex != null) { page = Convert.ToInt32(SelectPageIndex); isPaging = true; } obj = GetCountry(page, sortBy, isAsc, isPaging); if (obj.TotalPages == 0) obj.TotalPages = Convert.ToDouble(TotalCount); List PageCount = new List(); for (int i = 1; i <= Math.Ceiling(obj.TotalPages / obj.pageSize); i++) PageCount.Add(i.ToString()); ViewBag.TotalCountDropDown = new SelectList(PageCount.ToList()); ViewBag.SelectPageIndex = 1; return View("Index", obj); } ``` This completes the business logic on Controller side. Let's take a look at code on the View side. The helper method SortLink will create link for table header column and the for-each loop creates table rows. Listing 7: Helper method for SortLink ``` @helper sortLink(string name, int id) { @name if (id == Model.sortBy) { } } @{ int i = 1; foreach (GridViewSample.Models.ViewModel.CountryViewModel item in Model.CountryList) { } }
    @sortLink("ID", 1) @sortLink("Country Name", 2) @sortLink("Region", 3)
    @item.CountryID @item.Name @item.Region
    ``` ## Performance Aspect Let's take a look at coding to see how the performance was improved. As a developer, it is very important that we focus on performance during the development cycle instead of investing time after the task gets completed or when the feature goes live. Most of the solutions were fetching all records from SQL Server and later sorting was performed on objects during runtime. This resulted in setting up two objectives which I tried to accomplish using this sample application. 1. When paging is done, fetch only number of records defined in the page size instead of fetching all records and then filtering the records based on page index. Most solutions were fetching all records from database and later paging was done in .NET application pool. Every next or previous click was hitting the server for all the records. When records are less no performance issue you would see generally but when records are in millions, impact is addressable easily and we see the performance lag. 2. When we go for sorting the records, it's done on all records not on just grid view's current page records using OrderBy clause. One way doing it is just retrieve all records, apply the OrderBy clause on it and show the sorted records based on pagination current page number. Here again, we are stuck to all records retrieving process which is not desirable. Both objectives were achieved using LINQ Extension methods. Here is the reference link which I have referred for this sample application. [http://aonnull.blogspot.in/2010/08/dynamic-sql-like-linq-orderby-extension.html](http://aonnull.blogspot.in/2010/08/dynamic-sql-like-linq-orderby-extension.html) Listing 8: Use of Extension method in paging and sorting query. ``` string sortColumn = string.Empty; switch (sortBy) { case 1: if (isAsc) sortColumn = "CountryID"; else sortColumn = "CountryID Desc"; break; case 2: if (isAsc) sortColumn = "Name"; else sortColumn = "Name Desc"; break; case 3: if (isAsc) sortColumn = "Region"; else sortColumn = "Region Desc"; break; } ``` The code snippet given below shows the use of sorting and paging using LINQ. .OrderBy(sortColumn).Skip((page - 1) * pageSize).Take(pageSize + 1).ToList(); Now both sorting and paging work efficiently by fetching required records using skip() and take() methods from LINQ. ## Deploy Database into LocalDb using Package Manager Console 1. Download the source code file attached below. 2. Unzip and open GridViewSample.sln using Visual Studio 2012. 3. Build solution using Ctrl + Shift + B or click on Build menu → Build Solution. 4. Now open Package Manager Console from Tools → Library Package Manager. 5. Migration is already enabled. Hence, type the following command in Package Manager Console window. PM> Update-Database –verbose 6. The above command will deploy the database into LocalDb and using the Seed method populate few records into Countries table. 7. Now hit Ctrl + F5 to run the application. ## Areas of Improvement This sample application can be tweaked further to include search feature. I would recommend using Lucene.Net for search. I hope you find this post helpful. Happy Coding :) ## Download Sample [Click here](https://www.systenics.com/media/20130420_GridViewSampleMvc.zip) to download the sample application explained in this blog. ## Related pages on Systenics - [AI-powered listing description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) - [AuctionWorx products](https://www.systenics.com/products/) - [Industry solutions](https://www.systenics.com/solutions/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Bundle and Minify CSS/JS using ClientDependency in Umbraco 6 MVC/Razor URL: https://www.systenics.com/blogs/bundle-and-minify-cssjs-using-clientdependency-in-umbraco-6-mvcrazor/ Description: This is going to be a short post on how to configure style sheets and JavaScript # Bundle and Minify CSS/JS using ClientDependency in Umbraco 6 MVC/Razor **by:** Saurabh Nandu **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*ASP.NET MVC*](https://www.systenics.com/blogs/tag/aspnet-mvc/), [*Razor*](https://www.systenics.com/blogs/tag/razor/), [*Umbraco*](https://www.systenics.com/blogs/tag/umbraco/) This is going to be a short post on how to configure style sheets and JavaScript's bundling and minification in Umbraco 6 using **ClientDependency** framework in MVC. The benefits of bundling and minification are obvious as they reduce the number of HTTP requests as well as decrease the download size of resources to the browser resulting in a faster browsing experience. While Microsoft has prebuilt its own libraries to enable these features, Umbraco uses the **ClientDependency** framework to achieve the same. You can read more about the client dependency framework from its [codeplex website](http://clientdependency.codeplex.com/), its got quite a few configurations options and you and read more about them on its website. In this post I am just going to focus on getting an initial configuration up and running since there seems to be lack of clear documentation on the topic and it took me a while too to figure how to set it up correctly. This article assumes that you already have a installation of Umbraco 6 and have configured its rendering engine to use ASP.NET MVC for the pages. ## Getting Started The first essential step for **ClientDependency** to work is to ensure that **debug** mode is turned off in the**web.config** file. It's a neat idea, when you are in debug mode, bundling and minification is not applied so you can easily debug your files and continue fixing your css/js. Only when you are ready with the final output and ready for deployment which is indicated by setting **debug** mode as false, it acts as a trigger to turn on **ClientDependency** framework to come into play. So if you are not able to see the effects of bundling and minification the first checkpoint would be to ensure that you have set the **debug** mode to false in the **web.config** file. ``` ..... ... ``` Listing 1: Debug mode set as false The listing above shows a part of the **web.config** file explicitly setting the **debug** mode as false. The next step is to configure the **ClientDependency** framework configuration. Umbraco has a special config file in the **config** folder called **ClientDependency.config** which contains the configuration for the ClientDependency framework. In my test, the standard config file shipped with Umbraco 6.0 did not work correctly for MVC. Using it always lead to errors and at times the assembly ClientDependency.Core.MVC was reported missing by the ASP.NET runtime. The solution that I found, was to replace contents of the **ClientDependency.config** file with the sample configuration provided in the [sample documentation](http://clientdependency.codeplex.com/wikipage?title=Configuration&referringTitle=Documentation) on codeplex. Listing 2 shows the replaced contents of the config file. ``` ``` Listing 2: Updated ClientDependency.config file The config file above has configurations for both WebForms and MVC pages, you can read the documentation on codeplex to fine tune the configuration to meet the requirements of your project. One very powerful feature configured by the above config is **persistence**. Enabling persistence makes the framework save the bundled and mninified css/js to a temporary file on first run. All later requests are directly served from the static file, this ensures that CPU cycles on the server are saved at the same time response to the client becomes faster. This step can make a big impact on sites with a very high number of visitors. Another point to note is that if you look at line 14 the **clientDependency** tag has a **version** property, it is important to change the version number every time you update the css/js file. The persistence module does not detect changes to CSS/JS on the fly, so if you continue making changes in the css/js files they will not reflect! Ensure that after every change you manually update the version on the config file. The best way to tackle this issue is to ensure that you enable **ClientDependency** only after your JavaScript's and style sheets have stabilized or not use persistence till there is stabilization. With the configurations setup we are ready to use this framework in our View Templates. Another hiccup is trying to make sense of how to use its HTML helpers in MVC. The [documentation provided at codeplex](http://clientdependency.codeplex.com/wikipage?title=MVCFileRegistration&referringTitle=Documentation) for MVC is inadequate and keeps giving errors when used with Umbraco. Searching through several forum posts there is a solution provided in one of them, but I am not sure why that clarity has not made it back into the original documentation. The **ClientDependency** framework for MVC works in two parts, in first part you need to use HTML helper methods like **Html.RequireCss** and **Html.RequireJs** to define all the CSS/JS files that are needed on your page. The documentation linked above has various overloads for these helper methods. The second part is to use the **Html.RenderCssHere** and **Html.RenderJsHere** methods within your HTML markup to generate the appropriate link and script tags. Listing 3 shows a sample Umbraco MVC template ``` @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @using ClientDependency.Core.Mvc; @{ Layout = "SystenicsBaseBase.cshtml"; @Html.RequiresCss("~/css/Site.css"); @Html.RequiresJs("~/scripts/jquery-1.9.1.min.js",1); @Html.RequiresJs("~/scripts/commonscript.js",2); } @Umbraco.Field("sEOTitle") @Html.Raw(@Html.RenderCssHere()) @Html.Raw(@Html.RenderJsHere()) ..... ``` Listing 3 – Sample Umbraco Template using Html Helpers Its important to note from code listing 3 that you need to first import the **ClientDependency.Core.Mvc** assembly to use its helpers. The second critical step is to ensure you use the**Html.RequireCss** and **Html.RequireJs** helpers within the initial razor block. I tried defining them elsewhere on the page and it always returns invalid markup. This is a common mistake not documented on the framework site, but it leads to everyone wasting time trying to figure it out. As you can see from the listing above I have included one style sheet and two JavaScript files to be bundled and minified. Lastly, within the HTML head tag the style sheet and JavaScript is rendered. You could alternatively load the JavaScript anywhere within your Body tag for lazy loading of JavaScript. That's it! Save the template and fire up the Umbraco site in your browser, you will notice that it takes very long to render the first page, but later those pages are served very fast. You can also use the Chrome in-built tools to verify that the css/js files are indeed being bundled and compressed. I hope this short post will help you setup ClientDependency in your Umbraco setup, making your client websites super fast! ## Related pages on Systenics - [AuctionWorx products](https://www.systenics.com/products/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Building an ASP.NET Core 1.1 Application with PostgreSQL on Ubuntu Linux URL: https://www.systenics.com/blogs/building-an-aspnet-core-11-application-with-postgresql-on-ubuntu-linux/ Description: In this blog post, we will update the default scaffold ASP.NET Core 1.1 application using Entity Framework Core to connect to PostgreSQL database using Code first approach on Ubuntu Linux. We will explore some of the new features of ASP.NET Core 1.1 and how easy it is to use entity framework to connect to open source databases like PostgreSQL. We will be using the free, open source Visual Studio Code Editor and .NET CLI to build the application to understand how to build ASP.NET Core applications on Linux or other supported platforms. # Building an ASP.NET Core 1.1 Application with PostgreSQL on Ubuntu Linux **by:** Saurabh Nandu **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*ASP.NET Core*](https://www.systenics.com/blogs/tag/aspnet-core/), [*Linux*](https://www.systenics.com/blogs/tag/linux/) ## Overview ASP.NET Core 1.1 framework is the redefined version of tried and tested ASP.NET optimized to work cross platform and be hosted on various cloud platforms. Microsoft has finally opened up to embrace Linux rather than fight it off and the ASP.NET Core framework is a big step in that direction. In order to be able to achieve a true first class experience on the Linux Platform, Microsoft has rewritten the whole .NET Platform, releasing a subset of the BCL Framework under the .NET Standard and then the ASP.NET Core framework on top of it. ASP.NET Core was built from scratch to be platform independent and cloud optimized as a result of this it has far lesser features as compared to ASP.NET MVC 5 and is slowly catching up on the missing features implementing all the new ones in an platform independent way. The move to a platform independent ASP.NET Core has several added advantages, dependence of ASP.NET on Windows Server, specifically IIS is gone! ASP.NET Core can be hosted on any of the supporting platforms, this a huge win for small projects where building an ASP.NET Application for clients was cost prohibitive since the clients had to pay the windows server tax. Having a hard dependence on IIS made ASP.NET to be highly uncompetitive from a cost perspective for small projects, where PHP based projects are far more popular due to lower cost of hosting. Heck even Amazon has started [$5 VPS Linux VPS service](https://www.amazonlightsail.com/)! Such low priced hosting solutions have been totally out of reach for ASP.NET developers, hopefully ASP.NET Core will be popular enough for the vendors to start offering it as a selectable runtime option. The another benefit of moving cross platform is that dependence on Visual Studio goes away. Earlier, it has been unimaginable to build a professional ASP.NET application without using Visual Studio. Even though MS has released Visual Studio Community edition it has its hidden riders associated. ASP.NET Core on the other hand has been built to run via the CLI like other popular open source platforms for e.g NodeJS and any popular text editor can be used to build production sized applications. Microsoft's open source, light-weight Visual Studio Code Editor is also one of the good contenders for building ASP.NET Core applications. In this blog post, we will update the default scaffold ASP.NET Core 1.1 application using Entity Framework Core to connect to PostgreSQL database using Code first approach on Ubuntu Linux. We will explore some of the new features of ASP.NET Core 1.1 and how easy it is to use entity framework to connect to open source databases like PostgreSQL. We will be using the free, open source Visual Studio Code Editor and .NET CLI to build the application to understand how to build ASP.NET Core applications on Linux or other supported platforms. ## Install ASP.NET Core 1.1 Framework on Ubuntu The first step to start developing ASP.NET Core applications on Linux is to install the .NET Core runtime. Installation instructions are beyond the scope of this blog as well as constantly evolving as MS keeps updating their platform. As of now, 1.0.1 is the latest version of the .NET Core SDK which has support for the new **csproj** project file and other enhancements, you can install 1.0.1 version of the .NET SDK from [here](https://www.microsoft.com/net/core#linuxubuntu). I prefer Ubuntu 16.04 as the desktop environment for development. Once the .NET SDK is installed we can move forward to developing ASP.NET Core based applications. ## Installing Visual Studio Code As mentioned above, ASP.NET Core has been freed from Visual Studio and any text editor can be used to develop ASP.NET Core based applications. In this blog I choose to use Visual Studio Code which is an open source offering from Microsoft getting quickly popular and has the best open source editor support for ASP.NET Core. Its been regularly updated and its available for Windows, Mac and Linux. You can download the latest version of [Visual Studio Code from its website](https://code.visualstudio.com/Download). The downloaded *.deb file can be clicked in the File Manager and installed with the Ubuntu Software Center. There are tons of popular extensions available for VS Code. One of the core ones that we will need is the C# extension. If you have VS Code open you can go to the Extensions icon and see the popular extensions. Click on the Install button for C# to install the extension and Reload button once the extension is installed to have it enabled. We are now all set to start building our first ASP.NET Core Application. **Figure 1:** Install C# extension in Visual Studio Code ## Installing PostgreSQL on Ubuntu PostgreSQL is a popular open source relational database. Installation and configuration of PostgreSQL is not in the scope for this blog. There are various help guides that can guide you through the installation and configuration steps. Personally I like the [DigitalOcean blog](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-16-04) which explains the installation and Configuration process in a fairly easy to understand manner. Once you have PostgreSQL installed you should be able to get to the **psql** prompt to run sql queries against your database. ## Starting a New ASP.NET Core project using VS Code Now that we have the basics requirements for our first ASP.NET Core application ready we can dive straight up into creating our first ASP.NET Core application. Fire Up Visual Studio Code editor, and turn on the Integrated Terminal window from **View** Menu –> **Integrated Terminal** or using the shortcut **Ctrl+`**. The integrated terminal window will also us to run the Dotnet CLI commands so that we do not need an independent terminal window. Navigate to the folder where you wish to create your new application, I usually use create an **Applications** folder to store all my projects. Create a new folder called **AlumniConnect** under the **Applications** folder and use the **DOTNET** CLI command to create a new blank ASP.NET Core project. Run the following commands as shown in Listing 1 below, in the Integrated Terminal in VS Code to create a new **AlumniConnect** folder as well as create a new ASP.NET Core application using the **dotnet** cli command. It is essential to give read write permissions to the current user on the newly created folder so that we can develop, build and debug the application without seeking admin permissions all the time. ``` sudo mkdir AlumniConnect sudo chmod ugo+rwx AlumniConnect cd AlumniConnect dotnet new mvc --auth Individual --framework netcoreapp1.1 ``` **Listing 1:** Dotnet CLI to generate new ASP.NET Core web project **Figure 2:** Creating a new ASP.NET Core project using dotnet cli commands As you can see from the figure 2 above, the **dotnet new** cli command has created a set of boiler plate files necessary to start an empty ASP.NET Core project. Before we start working with this project, we need to load it in VS Code editor. Click on the **File** menu –> **Open Folder** and select the **AlumniConnect** folder from the dialog to load the folder. As soon as the folder is selected, VS Code will load the folder and detect that its loading an ASP.NET Core application. Once the folder is loaded at the Integrated Terminal, type the **dotnet restore** command to restore all the NuGet packages for the project. ## Configuring the ASP.NET Core application to use PostgreSQL The default template generated by the dotnet new cli command creates a project configured to use the SQLLite database. Since we wish to use PostgreSQL as our database one of the first things to do is to add the [Npgsql entity framework core provider](http://www.npgsql.org/efcore/index.html) to our project. To add a new nuget package to our project, run the commands shown in listing 2 in the Integrated Terminal window. ``` dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL sudo dotnet restore sudo dotnet build ``` **Listing 2:** Adding Npgsql Entity Framework Core packages to project The updated .NET SDK adds a new CLI command **dotnet add package ** to add NuGet packages to our project without manually editing and project files. You need to run the **dotnet restore** command after adding any package to ensure that dependent packages are also downloaded and added to the project. Once we have the required packages we need to make a few changes to the existing generate code to use PostgreSQL instead of the default SQL Lite database. Open up the **appsettings.json** file in the editor and change the **DefaultConnection** property to point to our PostgreSQL database. You will note that ASP.NET Core has removed the **web.config** file and now web application related settings can be stored in the **appsettings.json** file. Make sure you replace the Username and Password in the connect string shown in **Listing 3** below with the right one for your PostgreSQL database. ``` { "ConnectionStrings": { "DefaultConnection":"Host=localhost;Database=AlumniConnectDB;Username=postgres;Password=mypassword" }, ..... } ``` **Listing 3:** appsettings.json file with updated connection string Next, open the **Startup.cs** file in the VS Code editor and include the **Using Npgsql.EntityFrameworkCore.PostgreSQL;** to reference the PostgreSQL namespace. Then under the **ConfigureServices** method update the code so that the DBContext uses Npgsql (line 45) as the database provider instead of SQL Lite. **Listing 4** shows the updated **Startup.cs** class. ``` using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using AlumniConnect.Data; using AlumniConnect.Models; using AlumniConnect.Services; using Npgsql.EntityFrameworkCore.PostgreSQL; namespace AlumniConnect { public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); if (env.IsDevelopment()) { builder.AddUserSecrets(); } builder.AddEnvironmentVariables(); Configuration = builder.Build(); } public IConfigurationRoot Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDbContext(options => options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); services.AddMvc(); services.AddTransient(); services.AddTransient(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseIdentity(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } } } ``` **Listing 5:** Changes to Startup.cs class to add PostgreSQL Support The above changes are enough to switch from SQL Lite to PostgreSQL, although right now there is one more hack that we need to make to ensure that we can run the Entity Framework Migration tools from the CLI to update our database. I hope that its some kind of bug in the currently generated templates and future versions should not need this hack to enable the Entity Framework Tools. Open the AlumniConnect.csproj project file in the Visual Studio editor and add the **Microsoft.EntityFrameworkCore.Tools.DotNet**package definition to the **DotNetCliToolReference** reference section (lines 26 to 28) as shown in **Listing 6** below. ``` netcoreapp1.1 aspnet-AlumniConnect-3EC0E2B9-6463-4A54-9EB7-EA6C51F0F7CC 1.1.0 ``` **Listing 6:** Updated AlumniConnect.csproj file The updated .NET SDK has moved away from the JSON based **project.json**file to the XML based **project.csproj** file format to be compatible with older versions of ASP.NET project files. The NuGet pakcage definitions which used to be defined in **project.json** file have been shifted into the **project.csproj** amongst other project related settings. Once you save the **AlumniConnect.csproj** file, run the **sudo dotnet restore** command to download and install the **Microsoft.EntityFrameworkCore.Tools.DotNet** package. In my tests, I found that you need to provide elevated permissions after making this change since it downloads the NuGet package in outside the project folder for EF CLI support, so make sure to run this command with elevated permissions. Once it restores the package it will give our project Entity Framework Core CLI commands support. Now that we have our Entity Framework setup completed, use the Integrated Terminal to fire of the command shown in listing 7 to publish our entities to the PostgreSQL database. ``` sudo dotnet ef database update ``` **Listing 7:** Publish PostgreSQL Database The command shown in Listing 7 will create the **AlumniConnectDB** PostgreSQL database, if it does not exist as well as publish the schema based on the models required for the project. If you have **PGAdmin3** installed, then you can browse the **AlumniConnectDB** and see the schema generated by the EF CLI tool as shown in **Figure 3** below. **Figure 3:** PGAdmin3 AlumniConnectDB Schema Now that we have our EF CLI tools setup we can easily make further changes to the applications Models and use the EF Migrations CLI command to build schema migrations. You can learn more about the [EF CLI commands from here](https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet). Run the **dotnet build** and **dotnet run** commands again to launch the application. Point your web browser to [https://localhost:5000](https://localhost:5000/) to load the ASP.NET Core application. This time you can go to the Register link to register a new account (which creates an ASP.NET Identity account in PostgreSQL) as shown in **Figure 4**. **Figure 4:** Register new account This completes our short look at running ASP.NET Core 1.1 application on Ubuntu 16.04 using PostgreSQL database. In this blog post I have tried to cover some of the key new features provided by the ASP.NET Core and the .NET CLI. You can easy it very easy and seamless to integrate PostgreSQL into your ASP.NET Core application, almost making it a first class support database in the ASP.NET Core universe. I think this is a great step forward, to be able to unshackle the ASP.NET Framework from Windows Only, IIS Only, Visual Studio Only platform and make it a truly open source platform for development. You can find the source for this project [here.](https://github.com/saurabhnandu/AlumniConnect) ## Related pages on Systenics - [AuctionWorx products](https://www.systenics.com/products/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Build vs Buy: Custom Software vs SaaS for SMBs URL: https://www.systenics.com/blogs/build-vs-buy-custom-software-vs-saas-small-business/ Description: A custom software founder # Build vs Buy: Custom Software vs SaaS for SMBs **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*Custom Software*](https://www.systenics.com/blogs/tag/custom-software/), [*SMB Growth*](https://www.systenics.com/blogs/tag/smb-growth/), [*SaaS*](https://www.systenics.com/blogs/tag/saas/), [*Software Strategy*](https://www.systenics.com/blogs/tag/software-strategy/) Building custom software makes sense when your operational workflow gives you a true competitive advantage, or when rigid off-the-shelf SaaS tools force you to compromise your core process. On the flip side, buying existing software is the smart choice when you are solving common operational problems that everyone handles the same way. You do not always have to choose all-or-nothing between the two. A practical middle path exists, and exploring that balance is usually where our Squad starts every client discovery conversation. ## Evaluating Your Technology Needs Whenever someone asks whether they should build custom software, we walk through these core operational questions together. No single answer dictates the outcome, but answering yes to several usually signals that off-the-shelf tools are holding you back. - How many spreadsheets, manual copy-paste steps, and no-code connectors like Zapier or Make are holding your daily operations together? - Is your per-seat software bill scaling faster than your revenue because vendor subscription tiers penalize business growth? - Do you have total control and full ownership of your customer and operational data, or is it trapped inside a proprietary database? - Does your team regularly run into missing features or API limitations that the vendor has placed in their backlog with no release date in sight? - Do you face specific industry compliance, data sovereignty, or auditing requirements that commercial cloud subscriptions cannot accommodate? - Is the workflow you are digitizing the primary reason customers choose you over alternatives in your industry? ## Understanding the True Cost Curve Over Time Too many software sales pitches rely on inflated ROI charts. Looking at how each model behaves financially over a 3 to 5 year horizon reveals a clearer picture. Commercial SaaS products are inexpensive to start with and fast to set up. But as your team scales, licensing costs compound. Additional seats, premium feature tiers, and third-party connector fees multiply your monthly software spend. Custom software flips this structure. It involves a higher upfront investment to architect and build, followed by predictable cloud hosting and maintenance costs that stay relatively flat regardless of user count. If your team is growing steadily and you are juggling dozens of overlapping subscriptions, custom ownership often proves more economical over time. For a deeper framework on calculating total cost of ownership across software lifecycles, review [Gartner's TCO research guide](https://www.gartner.com/en/information-technology/glossary/total-cost-of-ownership-tco). ## The Middle Path: Extend Instead of Reinvent The decision does not have to be an all-or-nothing choice between total bespoke code and rigid off-the-shelf apps. The most effective approach for many growing businesses is keeping a proven platform at the core and building tailored extensions where they provide tangible competitive advantages. We see this pattern work exceptionally well with our AuctionWorx clients. Instead of spending hundreds of thousands of dollars rebuilding a complex auction engine from zero, they license a solid, proven platform. Our Squad then builds custom bidding workflows, mobile apps, and enterprise ERP integrations on top of its API. You can read how this architecture functions in our [AuctionWorx technical customization guide](https://www.systenics.com/blogs/auctionworx-customization-guide-bidding-apis-architecture/). The same philosophy applies across other enterprise systems. If your CRM, inventory management, or accounting software offers rich APIs, building a lightweight custom layer around that core delivers tailored automation without the burden of maintaining foundational infrastructure. ## Signs You Have Outgrown Off-the-Shelf SaaS - Your team spends more hours managing workarounds and manual syncing than doing productive work. - Every new employee requires an extensive onboarding checklist solely to navigate software limitations. - You cannot differentiate your customer experience because your software forces you into identical templates as competitors. - Critical support tickets regarding feature gaps receive generic responses indicating they are not on the product roadmap. - You are paying for multiple SaaS tools with overlapping features simply because no single platform supports your complete workflow. ## When We Advise You to Keep Buying Having developed custom enterprise applications, .NET systems, and Azure cloud solutions since Systenics was founded in 2006, I frequently advise prospective clients against custom builds. Common examples include standard double-entry accounting, team email, and basic CRM systems for small teams. If commercial software already solves 95% of your requirements and the vendor continues to innovate, buying is undeniably the right business decision. Our goal is helping our clients build sustainable, profitable businesses, not selling development hours for things you can buy off the shelf. If your goals can be met with an existing product, we will tell you directly on our first call. ## How Our Squad Approaches Custom Software Engagements When a custom solution or platform extension is clearly the right move, we execute through a transparent, disciplined development process. We begin with a collaborative discovery session to analyze your exact workflows and edge cases. From there, we provide a fixed-price proposal before development starts, paired with milestone-based delivery so you test working software at every stage. You retain complete ownership of the source code and infrastructure from day one through mission launch. If your mission includes upgrading an existing legacy system, take a look at our [ASP.NET to .NET 10 modernization playbook](https://www.systenics.com/blogs/migrating-legacy-aspnet-to-dotnet-10-smb-modernization-playbook/). If you are also deciding on how to structure your development team, read our practical analysis on [offshore vs nearshore vs local software developers](https://www.systenics.com/blogs/offshore-vs-nearshore-vs-local-software-developers-us-small-business/). You can see more examples of what our Squad builds on our [solutions page](https://www.systenics.com/solutions/). ## Frequently Asked Questions ### How do I decide build vs buy software for my small business? Start with your operational workflow. If the process is standard and every competitor handles it similarly, buying SaaS is almost always the right move. If the process is how you differentiate and win deals, or if you find yourself bending off-the-shelf software with messy spreadsheets and glue scripts, building custom software makes sense. ### Is custom software always more expensive than off-the-shelf SaaS? Not over the long haul. SaaS software carries monthly per-seat licensing fees that scale up as your headcount grows. Custom software requires an upfront capital investment followed by steady maintenance and hosting. Depending on team size and operational complexity, custom software can easily become more cost-effective over several years. ### When should I build custom software instead of extending a SaaS tool? Consider custom software when vendor roadmaps ignore your critical feature requests, when your data is locked behind restrictive export limits, or when strict regulatory and compliance requirements outgrow what standard tiers offer. ### What is the middle path between custom software and SaaS? The middle path involves keeping a reliable commercial platform at the core and building a focused custom extension layer around its APIs. For instance, many AuctionWorx operators maintain the core platform while developing custom bidding engines and ERP integrations on top. ### Should a five-person team ever build custom software? Rarely for standard operations like accounting, payroll, or basic email. At that stage, buying established SaaS tools with mature roadmaps is much faster and more cost-effective. If you are tired of wrestling with rigid tools and want an objective perspective on whether to build, buy, or extend, our Squad is ready to help you chart the right course. [Connect for mission launch **](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Bring a Trailer Alternative: Launch Your Own White-Label Auto Auction Marketplace URL: https://www.systenics.com/blogs/bring-a-trailer-alternative-launch-your-own-white-label-auto-auction-marketplace/ Description: Explore whether listing on third-party car auction marketplaces or owning your own white-label auto auction platform is the smarter long-term strategy. A neutral comparison of marketplace dependency vs. platform ownership with AuctionWorx. # Bring a Trailer Alternative: Launch Your Own White-Label Auto Auction Marketplace **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/), [*Automobile Auctions*](https://www.systenics.com/blogs/tag/automobile-auctions/) The online automobile auction space has exploded over the past decade. Platforms like [Bring a Trailer](https://bringatrailer.com/) (BaT) have played a massive role in that transformation — turning collector car sales into a spectator sport with editorial-style listings, passionate comment threads, and transparent final sale prices. For casual sellers looking to move a single vehicle, these marketplaces are a perfectly viable option. But here's the question that rarely gets asked: **if you're building an auction *business*** — whether you're a dealer, an auction house, or an entrepreneur entering the auto auction space — is listing on someone else's marketplace really the right long-term play? In this post, we'll walk through both paths — listing on a third-party marketplace versus launching your own white-label auto auction platform powered by [AuctionWorx Auto Auction Suite](https://www.systenics.com/auctionworx/end-to-end-solution-for-your-used-rare-or-new-automobile-auctions/) — and let you decide which model aligns with your mission. ## The Marketplace Model: What Third-Party Platforms Do Well Let's give credit where it's due. Third-party auto auction marketplaces like BaT have built impressive ecosystems. They've solved the cold-start problem — amassing hundreds of thousands of registered enthusiasts who actively browse, comment on, and bid on vehicles. For a first-time seller with a single classic car, the built-in audience is the primary value proposition. These platforms handle the infrastructure, the payment processing, the marketing, and — in BaT's case — an editorial review process that adds credibility to each listing. The seller submits photos and details, the marketplace curates the listing, and buyers show up because they trust the platform's brand. For individual, infrequent sellers, this works. But as your volume and ambitions grow, this same model introduces a set of strategic trade-offs that are worth examining closely. ## The Hidden Cost: Who Owns Your Customers? This is the single most important question in the entire marketplace-vs-ownership debate, and it's the one most sellers never ask until it's too late. When you list a vehicle on a third-party marketplace, **every buyer who bids, every enthusiast who comments, every person who watches your listing — they are the marketplace's customers, not yours.** You don't get their email addresses. You don't see their bidding history across other auctions. You can't send them a notification when your next vehicle goes live. You can't build a CRM, run remarketing campaigns, or develop a relationship that extends beyond a single transaction. Consider what this means at scale. If you sell 50 vehicles a year on a third-party platform, and each auction attracts 200 unique bidders, that's **10,000 high-intent buyer interactions per year** that belong entirely to someone else's database. Those buyers came for your inventory, but the marketplace captured the relationship. The next time those buyers are ready to bid, they'll browse the marketplace's homepage — not yours. In any business, your customer list is your most defensible asset. Marketplaces, by design, sit between you and that asset. ## The White-Label Alternative: Building Your Own Platform The alternative is straightforward: instead of renting space on someone else's marketplace, you **own the entire platform**. Your domain. Your brand. Your mobile app in the App Store. Your buyer database. Your fee structure. Your rules. This is exactly what the [AuctionWorx Auto Auction Suite](https://www.systenics.com/auctionworx/end-to-end-solution-for-your-used-rare-or-new-automobile-auctions/) enables. It's a fully white-label automobile auction platform that gives you everything a marketplace like BaT offers — VIN decoding, high-resolution photo galleries, community engagement, timed auctions — plus the one thing no marketplace will ever give you: **complete ownership of the business layer**. You're not a tenant on someone else's platform. You're the platform operator. Every registration, every bid, every dollar in buyer's premium flows through your infrastructure and into your business. ## Side-by-Side: Marketplace vs. Your Own Platform Here's how the two models compare across the dimensions that matter most for anyone building a sustainable auto auction business: Dimension Third-Party Marketplace Your Own Platform (AuctionWorx) **Customer Data** The marketplace owns all buyer data, bid history, and contact info ** You own 100% of buyer and seller data — full CRM access **Branding** Their brand, their domain — your vehicles appear under their identity ** Your brand, your domain, your App Store listing **Fee Structure** Marketplace sets buyer's premium + listing fees; you have no control ** You define buyer's premium, seller fees, and commission rates **Listing Control** Editorial team curates and approves listings — they decide what goes live ** You control every listing — approval, presentation, timing **Auction Formats** One format (typically 7-day timed auction) ** Timed, live, proxy bidding, Buy Now, Make Offer — fully configurable **Mobile Presence** No branded mobile app — your inventory lives inside their app ** [Native iOS & Android apps](https://www.systenics.com/auctionworx/mobile-apps/) with YOUR branding and push notifications **Platform Risk** Policy changes, fee hikes, or shutdown could disrupt your business overnight ** You own the platform — zero third-party dependency **Remarketing** No access to buyer behavior for retargeting or outbid notifications ** Full remarketing: outbid alerts, watchlist nudges, email campaigns **Geography** Typically limited to the marketplace's focus region ** Serve any market — local, national, or international **Auto-Specific Tools** Basic photo uploads and description fields ** [VIN decoding](https://www.systenics.com/auctionworx/end-to-end-solution-for-your-used-rare-or-new-automobile-auctions/), damage annotation, condition reports, [AI description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) ## Deep Dive: Why Data Ownership Changes Everything Let's spend a moment on the data ownership row, because it's the single factor that determines whether you're building a business or simply feeding someone else's. ### Remarketing to Past Bidders When you own your platform, every bidder who participates in an auction — even if they don't win — becomes a lead in your database. You know what they bid on, how high they went, and when they dropped off. The next time a similar vehicle hits your platform, you can send a targeted notification: *"A 1972 Datsun 240Z just listed — similar to the one you bid on last month."* On a third-party marketplace, that bidder is gone. They'll see your next listing only if the marketplace's algorithm decides to surface it. You have no direct channel back to them. ### Building Buyer Loyalty Repeat buyers are the lifeblood of any auction business. When buyers bookmark your platform, download your [branded mobile app](https://www.systenics.com/auctionworx/mobile-apps/), and enable push notifications for new listings, they're forming a habit around *your* brand — not a marketplace's. Over time, this creates a self-reinforcing cycle: more returning buyers means more competitive bidding, which means higher hammer prices, which attracts more quality consignments. On a marketplace, buyer loyalty accrues to the marketplace itself. A buyer who loves bidding on your cars will return to BaT's homepage, not yours — and they'll bid on other dealers' cars too. ### Analyzing Bidding Patterns With your own platform, you get full analytics: which vehicle categories generate the most bids, what time of day auctions close at the highest prices, which geographic regions produce the most active bidders. This data lets you optimize your consignment strategy, schedule auction endings for peak engagement, and target your marketing spend with precision. On a marketplace, you get a final sale price and a congratulations email. ### Creating a Defensible Business Moat A proprietary buyer database is an asset that appreciates over time. It's also an asset that's nearly impossible for a competitor to replicate. When you've built a registered base of 5,000, 10,000, or 50,000 auto enthusiasts who actively engage with your platform, that's a moat. It's a competitive advantage that survives market fluctuations, algorithm changes, and competitor moves. If your entire business runs on a third-party marketplace, your moat is... the quality of your photos. The moment a marketplace changes its fee structure, modifies its curation criteria, or prioritizes a competitor's inventory over yours, you're exposed — with zero customer relationships to fall back on. ## What You Get with AuctionWorx Auto Auction Suite The [Auto Auction Suite](https://www.systenics.com/auctionworx/end-to-end-solution-for-your-used-rare-or-new-automobile-auctions/) is purpose-built for automobile auctioneers who want marketplace-grade functionality under their own roof. Here's a snapshot of what's included: - **VIN Decoding:** Automatically populate year, make, model, trim, engine, and 100+ spec fields from a single VIN entry. - **Damage Annotation:** Interactive vehicle diagrams that let sellers mark and annotate body damage, paint issues, or mechanical concerns — giving buyers transparency that builds trust. - **AI-Powered Descriptions:** [Generate professional listing descriptions](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) from structured vehicle data in seconds, maintaining consistent quality across your catalogue. - **Community Engagement:** Built-in [comment threads and activity feeds](https://www.systenics.com/auctionworx/community-activity-feed/) that mirror the social, discussion-driven experience buyers love on platforms like BaT. - **Live & Timed Auctions:** Run traditional [simulcast live auctions](https://www.systenics.com/auctionworx/live-auctions/) or modern timed online auctions — or both — from a single platform. - **Branded Mobile Apps:** [Native iOS and Android apps](https://www.systenics.com/auctionworx/mobile-apps/) published under your brand, with push notifications for outbids, ending-soon alerts, and new listings. - **Flexible Fee Engine:** Configure buyer's premiums, seller commissions, listing fees, and payment processing exactly the way your business model requires. - **Full Admin Control:** Approve listings, manage users, moderate comments, export data, configure auction rules — every aspect of the platform is yours to manage. [Explore the Full Auto Auction Suite **](https://www.systenics.com/auctionworx/end-to-end-solution-for-your-used-rare-or-new-automobile-auctions/) ## Who Should Consider Owning Their Platform? Not everyone needs their own auto auction platform. If you sell one classic car every few years, a marketplace is the path of least resistance. But the white-label model is the strategically superior choice for: - **Established Dealers & Auction Houses:** You already have inventory, consignment relationships, and industry reputation. What you need is a technology platform that captures buyer data and grows your digital presence under *your* brand. - **Niche Collectors & Specialists:** Whether you focus on Japanese imports, pre-war classics, American muscle, or exotic supercars, a dedicated platform positions you as the authority in your niche — something a general marketplace can never replicate. - **Regional Auction Companies:** If you serve a specific geographic market, your own platform lets you dominate local search results, build a community of regional buyers, and operate without competing against nationwide inventory for attention. - **Entrepreneurs Entering the Space:** If you see the opportunity in the growing online auto auction market and want to build a scalable business, starting with your own platform from day one ensures every dollar you invest in marketing builds *your* asset, not a marketplace's. ## The Bottom Line Bring a Trailer and similar third-party marketplaces have done something remarkable: they've proven that collectors and enthusiasts will eagerly participate in online auto auctions. They've validated the market. The question is whether you want to participate in *their* market — or build your own. For casual, infrequent sellers, marketplaces are a great option. The built-in audience, the curated experience, and the simplicity of the process make them an attractive choice for a single transaction. But for anyone with ambitions beyond a single sale — for dealers looking to go digital, for auction houses expanding online, for entrepreneurs building the next great auto auction brand — **owning the platform is the strategically defensible path**. You own the data. You own the brand. You own the customer relationships. And every auction you run compounds the value of the business you're building. Our Superhero Squad has spent over a decade building and deploying auto auction platforms for businesses across the globe. We've seen firsthand how platform ownership transforms auction operations from transactional to scalable — and we're ready to help you launch yours. ## Ready to Own Your Auto Auction Platform? Let our Squad help you launch your next mission. Whether you're migrating from a third-party marketplace or starting fresh, we'll tailor the [Auto Auction Suite](https://www.systenics.com/auctionworx/end-to-end-solution-for-your-used-rare-or-new-automobile-auctions/) to fit your exact business model, branding, and operational needs. [Connect for Mission Launch **](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) - [AI-powered listing description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) - [Industry solutions](https://www.systenics.com/solutions/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Benefits of Hosting AuctionWorx Platform on Microsoft Azure Cloud URL: https://www.systenics.com/blogs/benefits-of-hosting-auctionworx-platform-on-microsoft-azure-cloud/ Description: The decision to host an application is a critical one, impacting performance, scalability, security, and cost. AuctionWorx, a robust platform for auction management, can significantly benefit from the cloud-native capabilities offered by Microsoft Azure. This blog delves into the compelling reasons why hosting AuctionWorx on Azure is a strategic advantage. # Benefits of Hosting AuctionWorx Platform on Microsoft Azure Cloud **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/), [*Azure*](https://www.systenics.com/blogs/tag/azure/) ### Introduction The decision to host an application is a critical one, impacting performance, scalability, security, and cost. AuctionWorx, a robust platform for auction management, can significantly benefit from the cloud-native capabilities offered by Microsoft Azure. Hosting AuctionWorx on shared hosting platform is common, until your audience grows and you need to explore better hosting and scalablity options. This blog delves into the compelling reasons why hosting AuctionWorx on Azure is a strategic advantage and how our[AuctionWorx platform team](https://www.systenics.com/auctionworx/) can help you host your AuctionWorx on Azure. ### Understanding AuctionWorx and Azure Before diving into the benefits, let's briefly understand the two key players: #### AuctionWorx Platform AuctionWorx is a comprehensive platform designed to streamline auction processes. It offers features like item listing, bidding management, payment processing, and real-time reporting. To function optimally, it requires a robust and scalable infrastructure. #### Microsoft Azure Cloud Microsoft Azure is a cloud computing platform offering a vast array of services, including compute, storage, networking, databases, and analytics. Its hybrid and multi-cloud capabilities, coupled with robust security features, make it an ideal choice for hosting applications like AuctionWorx. One key reason Azure is chosen vs. Amazon AWS is that Azure offers the best platform for hosting ASP.NET based applications. There are cost and management time saving hosting your AuctionWorx platform on Azure vs. AWS. ### Key Benefits of Hosting AuctionWorx on Azure #### 1. Scalability and Flexibility - **Dynamic Resource Allocation:** Azure's ability to automatically scale resources based on demand is crucial for auction platforms. During peak bidding periods, Azure can effortlessly provision additional compute and storage resources, ensuring optimal performance and preventing system overload. - **Geographical Distribution:** Azure's global data centers allow you to deploy AuctionWorx closer to your target audience, reducing latency and improving user experience. - **Files Scalability:** As the number of auctions listings grows, the number of image files generated and managed grows along with it. Azure file storage provides a seamless solution to scale file storage seamlessly at a cost effective rate. #### 2. Enhanced Performance - **High-Performance Computing:** As the number of active users bidding on your site grows we need to scale the CPU Compute proportionately to ensure flawless auctions. Real-time bidding of auctions is CPU demanding and Azure have various high-performance compute options to ensure scalability. - **Low Latency:** Azure's global network infrastructure and content delivery network (CDN) minimize latency, providing a seamless user experience for bidders and auctioneers. #### 3. Robust Security - **Comprehensive Threat Protection:** Azure incorporates advanced security measures like threat intelligence, intrusion detection, and data encryption to safeguard your auction data and protect against cyberattacks. - **Compliance Adherence:** Azure helps you meet industry-specific compliance standards (e.g., GDPR, PCI DSS) with built-in features and certifications, ensuring data privacy and security. #### 4. Cost-Efficiency - **Pay-as-you-go Model:** Azure's flexible pricing model allows you to optimize costs by paying only for the resources you consume. This is particularly advantageous during off-peak auction periods. - **Reserve Pricing:** Azure provides discounted pricing for compute resources reserved for a longer period of time. It's a good opportunity for customers to take advantage of lower pricing and get better resources. #### 5. Disaster Recovery and Business Continuity - **Data Backup and Recovery:** Azure offers robust data backup and recovery options, protecting your auction data from accidental deletion or disasters. - **Geo-Redundancy:** By replicating data across multiple Azure regions, you can ensure business continuity in case of regional outages or disasters. ### Conclusion Hosting AuctionWorx on Microsoft Azure offers a multitude of benefits, including scalability, performance, security, cost-efficiency, and disaster recovery. By leveraging Azure's comprehensive suite of services, AuctionWorx platforms can achieve optimal performance, enhance user experience, and drive business growth. ### Summary: Let Systenics Help You Migrate to Azure At Systenics, we specialize in migrating applications to Azure and optimizing their performance. We are Microsoft Gold Partners for Azure Cloud as well as RainWorx Preminium Partners. Our experts have in-depth knowledge of AuctionWorx and Azure, enabling us to seamlessly transition your platform to the cloud. We offer comprehensive migration services, including: If you also need platform changes during migration, our[AuctionWorx development and customization services](https://www.systenics.com/auctionworx/development-and-customization/) help teams combine hosting improvements with feature delivery, integrations, and operational upgrades. - Assessment of your current AuctionWorx environment - Development of a tailored migration plan - Migration execution and data transfer - Performance optimization and testing - Ongoing support and maintenance [Contact us](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) today to discuss your AuctionWorx migration needs and experience the benefits of hosting on Azure. ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: AuctionWorx vs the Alternatives: Choosing Your Auction Platform URL: https://www.systenics.com/blogs/auctionworx-vs-alternatives-choosing-your-auction-platform/ Description: An honest comparison of AuctionWorx against SaaS auction tools, PHP scripts and no-code marketplace builders, from a team that # AuctionWorx vs the Alternatives: Choosing Your Auction Platform **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/) If you're planning an online auction business, the platform decision is the one you'll live with longest. We've spent 15+ years building on RainWorx's [AuctionWorx](https://www.systenics.com/auctionworx/) as a Premium Partner, so yes, we have a favorite. But we've also watched clients arrive from every alternative on this list, and the honest answer is that the right platform depends on what you're building. Here's the comparison we walk every new client through. ## The five ways to build an auction site - **Self-hosted commercial platforms (AuctionWorx):** You buy a license once, host it yourself (or in Azure), and own the whole stack: your domain, your data, your fees, your buyer relationships. AuctionWorx is built on Microsoft .NET, which means a mature, enterprise-grade codebase that a professional developer can extend almost without limits. - **SaaS auction tools (e.g. BiddingOwl, BetterWorld):** Fast to launch and great for one-off charity events. Many are free or cheap because they monetize through your donors or take a percentage. The trade-off: your auction lives on their platform, with their branding rules, their fee changes, and no meaningful customization. - **Self-hosted PHP scripts (e.g. PHP Pro Bid):** Lower upfront cost and full self-hosting, but you inherit the maintenance burden of the codebase, and finding experienced developers for a niche PHP script is harder than it looks. - **No-code marketplace builders (e.g. Sharetribe):** Excellent for validating an idea in a weekend. But auction mechanics (proxy bidding, soft-close anti-sniping, reserve logic, buyer's premiums) are exactly the features no-code builders handle worst. Most auction businesses that start here rebuild within two years. - **Fully custom builds:** Total freedom, maximum cost. Sensible when your auction model is genuinely novel; expensive insurance when AuctionWorx plus targeted customization would get you there for a fraction of the price. ## Side-by-side Dimension AuctionWorx SaaS Tools PHP Scripts No-Code Builders Fully Custom **Upfront cost** One-time license + hosting Low / free Low Subscription High **Ongoing fees** Hosting only % or fees Hosting Monthly + transaction Hosting **Ownership & data** You own everything Platform owns relationship You own it Partial Total **Auction-specific features** Deep auction feature set Event-focused Moderate Weak for auctions Whatever you pay for **Customizability** Highly customizable (.NET) Minimal Moderate but aging Limited Unlimited **Time to launch** Weeks Days Weeks Days Months **Developer availability** RainWorx partners like us N/A Scarce N/A Any stack you choose ## Where AuctionWorx wins outright - Recurring commercial auctions (weekly estate sales, dealer car auctions, liquidation lots) where fees and buyer data compound in your favor. - Anyone who's outgrown a marketplace and wants buyers forming habits around their brand, not eBay's. - Operators who want auction mechanics that just work: proxy bidding, staggered soft closes, buyer's premiums, invoicing. ## Where it isn't the answer A single annual charity gala doesn't need a platform license: use a SaaS event tool and keep your weekend. And if you're still validating whether anyone wants your auction concept at all, a no-code experiment is cheaper tuition. ## Extending AuctionWorx: where we come in Out of the box, AuctionWorx covers the auction engine. The gap between "installed" and "thriving marketplace" is where a development partner earns their keep: [mobile apps](https://www.systenics.com/auctionworx/mobile-apps/), [barcode listing creation](https://www.systenics.com/auctionworx/barcode-listing-creation/), [AI descriptions](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/), [Dutch auctions](https://www.systenics.com/auctionworx/dutch-auctions/), [volume buy](https://www.systenics.com/auctionworx/volume-buy/), and [WHMSPro](https://www.systenics.com/auctionworx/warehouse-management/), all with [transparent one-time pricing](https://www.systenics.com/auctionworx/pricing/), plus vertical end-to-end solutions for [automobiles](https://www.systenics.com/auctionworx/end-to-end-solution-for-your-used-rare-or-new-automobile-auctions/), [real estate](https://www.systenics.com/auctionworx/power-your-property-auctions-with-systenics-innovative-end-to-end-solutions/), [livestock](https://www.systenics.com/auctionworx/streamline-livestock-auctions-with-systenics-end-to-end-solutions/), [estate sales](https://www.systenics.com/auctionworx/end-to-end-solution-for-estate-sales-auctions-with-systenics/), [antiques & collectibles](https://www.systenics.com/auctionworx/power-your-antiques-collectibles-auction-marketplace-with-systenics/) and [e-commerce returns](https://www.systenics.com/auctionworx/end-to-end-solution-for-auction-of-ecommerce-overstock-box-damaged-and-returned-items/). ## Ready to Decide? Still weighing platforms? Book a 30-minute call and we'll tell you honestly whether AuctionWorx fits your model. If it doesn't, we'll tell you that too. [Book a Call **](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) - [AI-powered listing description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) - [Industry solutions](https://www.systenics.com/solutions/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: AuctionWorx Upgrade Playbook: Protect Customizations URL: https://www.systenics.com/blogs/auctionworx-upgrade-playbook-keep-customizations-safe/ Description: A practical playbook for upgrading AuctionWorx without breaking your custom features, integrations, or database changes. # AuctionWorx Upgrade Playbook: Protect Customizations **by:** Saurabh Nandu **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/), [*Upgrades*](https://www.systenics.com/blogs/tag/upgrades/), [*.NET*](https://www.systenics.com/blogs/tag/net/), [*DevOps*](https://www.systenics.com/blogs/tag/devops/) An AuctionWorx platform upgrade should bring speed and new capabilities, not panic on auction day. If your site has been running for a while, chances are it is no longer stock out of the box. You might have custom commission tiers, a branded theme, tailored payment gateways, or custom APIs powering a mobile bidding app. When a core upgrade installer runs, it can easily overwrite modified files if they were placed in the wrong directories. Our Squad put together this field-tested playbook so you can upgrade cleanly and protect your hard-earned customizations. ## Step 1: The Pre-Upgrade Customization Audit Before anyone touches an upgrade package, you need a precise inventory of every custom element across your application. Knowing exactly where your codebase differs from stock AuctionWorx prevents surprise regressions during deployment. - Inventory all custom controllers, services, and helper classes added outside standard modules. - Review theme overrides, Razor views, and custom CSS or JavaScript bundles to see which core templates they originated from. - Document every database schema modification, including custom tables, added columns, custom indexes, or modified stored procedures. - Map external integrations such as payment processors, SMS or email gateways, shipping APIs, and mobile app feeds. - Note your current AuctionWorx version, .NET runtime, IIS settings, and server dependencies. - Verify who maintains the Git repository and ensure all recent production patches are committed to version control. ## Watch Out for Core File Modifications If your team cannot pull this inventory together quickly, that is usually a sign that previous modifications were made directly inside core files instead of using supported hooks, partial classes, or override folders. When code is edited directly inside vendor files, every subsequent upgrade requires tedious manual file diffing. We dive deeper into this technical debt in our guide on [why the cheapest AuctionWorx developer costs the most](https://www.systenics.com/blogs/why-the-cheapest-auctionworx-developer-costs-the-most/). If that describes your site, completing this audit first is critical. ## Step 2: Mirror and Rehearse on Staging Never perform an upgrade directly on your production server. A dedicated staging environment lets you test the migration process safely, uncover conflicts early, and rehearse your exact cutover procedure. - Clone your production database and web files into an isolated staging environment. - Scrub or anonymize user credentials, bidder records, and payment tokens in the staging database for privacy and compliance. - Match the production server configuration closely, including IIS pool settings, SSL bindings, and caching rules. For architectural recommendations, check out our guide to [hosting AuctionWorx on Microsoft Azure](https://www.systenics.com/blogs/benefits-of-hosting-auctionworx-platform-on-microsoft-azure-cloud/). - Apply the AuctionWorx upgrade package to staging and run a Git diff to identify any overwritten or conflicting files. - Refactor any fragile customizations into supported extension points provided by newer AuctionWorx releases. ## Step 3: Run a Backup and Restore Fire Drill A backup is only as good as your ability to restore it under pressure. Before touching live production, back up your complete environment and verify that you can restore it from scratch to a working state. - Create a full SQL database backup and a compressed snapshot of the entire web application directory. - Perform a test restore on a secondary test server to confirm that the database attaches and the site boots cleanly. - Clock the exact restore time so your team knows precisely how long a full rollback takes if needed. - Ensure backups are safely stored in secure off-site or cloud storage away from the production host. ## Step 4: Execute Methodical Regression Testing Once staging runs the upgraded version and your custom features are merged, work through a comprehensive end-to-end regression checklist. Do not rely on quick spot checks when real bids and payments are at stake. - Bidding logic: test standard bids, proxy bidding increments, reserve thresholds, and bid history timestamps. - Invoicing and fees: generate test invoices to verify that buyer premiums, custom fee structures, and sales taxes calculate properly. - Payment processing: complete full end-to-end checkout transactions through your active payment gateways in sandbox mode. - Notification delivery: verify automated emails for outbid alerts, invoices, user registration, and custom transactional alerts. - Listing management: publish listings with custom attributes, file attachments, and media galleries to confirm fields display properly. - Operational reporting: run financial statements and seller settlements, comparing the output against pre-upgrade baseline reports. - Mobile app contracts: test mobile endpoints to confirm JSON payloads and authentication tokens match what the mobile app expects. - Custom extensions: individually validate any custom plugins, background sync jobs, or ERP integrations. ## Step 5: Define Clear Rollback Triggers Decide on your go and no-go criteria before you begin the maintenance window, not while troubleshooting under midnight deadlines. Clear criteria eliminate guesswork if unexpected issues appear. - Establish specific benchmarks for core workflows: if checkout or proxy bidding fails during cutover, rollback is mandatory. - Designate a single technical lead who has the final authority to call a rollback. - Keep the restore playbook and timings open and accessible to the deployment team. - Set a hard cutover time limit. If smoke tests are not fully green by the deadline, roll back cleanly and reschedule instead of improvising fixes on a live site. ## Step 6: Live Cutover and User Communication With staging tests passing and rollback plans verified, deployment day becomes an orderly execution. Clear communication keeps both sellers and bidders informed and confident in your platform. - Schedule the cutover during historically low-traffic hours, ensuring no active auctions are closing during the maintenance window. - Notify your community in advance across email and site announcements with clear dates, times, and expected duration. - Display a clean, branded maintenance landing page while database migrations and file deployments run. - Execute a rapid post-deploy smoke test covering authentication, item listings, bidding, and payment processing. - Monitor server health metrics, exception logs, and customer support queues closely throughout the initial live hours. Systenics has been a trusted RainWorx Premium Partner for over 15 years, maintaining and upgrading heavily customized AuctionWorx environments across dozens of version releases. If you are preparing for a major version jump or need help untangling legacy modifications, our Squad can partner with your team to deliver a smooth, reliable upgrade. Explore our [AuctionWorx customization services](https://www.systenics.com/auctionworx/development-and-customization/) or check out our architectural overview in the [AuctionWorx technical customization guide](https://www.systenics.com/blogs/auctionworx-customization-guide-bidding-apis-architecture/). ## Frequently Asked Questions ### How do I upgrade AuctionWorx to a new version without losing customizations? Start by cataloging every modified file, view override, and database change before running any installer. Test the upgrade in an isolated staging clone first, diff your custom code against updated core files, and re-apply changes through standard extension points before deploying to production with a rehearsed rollback plan. ### What breaks most often during an AuctionWorx version upgrade? Custom views and Razor templates copied directly from earlier core versions tend to break first because new releases update core markup and models. Undocumented database schema changes, custom payment gateway hooks, and mobile app API endpoints are also frequent points of failure. ### Should I test an AuctionWorx migration on a staging site first? Yes, always. A staging environment mirrored from production allows your team to test the upgrade, identify code conflicts, and practice rollback procedures without risking live auctions or bidder trust. ### How long should I freeze bidding during an AuctionWorx upgrade? Base your maintenance window on how long your staging rehearsals take instead of guessing. Time the database migration, deployment, and smoke testing in staging, then schedule the live cutover during your lowest-traffic window with advance notice to users. ### What should be in an AuctionWorx regression checklist after an upgrade? Verify user login, real-time and proxy bidding, invoice generation, buyer premium calculations, payment gateway transactions, email dispatch, admin reports, and mobile API endpoints. You do not have to gamble on auction day. Partner with our Squad to audit your codebase, upgrade your infrastructure, and bring your AuctionWorx site forward with complete peace of mind. [Connect for mission launch **](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) - [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/) - [AuctionWorx products](https://www.systenics.com/products/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: AuctionWorx Enterprise vs Events Edition URL: https://www.systenics.com/blogs/auctionworx-enterprise-vs-events-edition-comparison/ Description: AuctionWorx Enterprise runs marketplace listings with independent closing times, while Events Edition runs scheduled, cataloged auction sales. Here is how to pick. # AuctionWorx Enterprise vs Events Edition **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/), [*Auction Platform*](https://www.systenics.com/blogs/tag/auction-platform/), [*Comparison*](https://www.systenics.com/blogs/tag/comparison/) AuctionWorx Enterprise is built for businesses that list inventory continuously and let each item close on its own timeline, whether you are running a single-seller storefront or an approved multi-seller marketplace. AuctionWorx Events Edition is designed for scheduled auction sales: a catalog of lots tied to a specific event date, ending with staggered, calculated closing times. Both run on RainWorx's proven [AuctionWorx](https://www.systenics.com/auctionworx/) platform, but choosing the wrong edition early leads to painful rework down the road. ## What AuctionWorx Enterprise Is Built For Enterprise is the foundational edition of AuctionWorx. RainWorx structures it around individual listings instead of scheduled events. Items go live and close on their own schedules without needing to be packaged into a collective sale. That makes Enterprise ideal for an always-on marketplace where fresh inventory arrives daily and buyers browse continuously. You can operate it as a single seller selling direct inventory, or open it up as a multi-seller exchange where vetted vendors list goods while the platform automatically tracks seller fees and settlement. RainWorx's [documented feature set](https://www.rainworx.com/AuctionWorx/Features) includes proxy bidding, reserve pricing, buy-now purchases, auto-extend sniper protection, fixed-price listings, integrated invoicing with checkout, and deep consignment management (such as custom consignor tiers, settlement statements, and payout reports). Our Squad routinely deploys Enterprise when clients want a branded, 24/7 marketplace operating on their own domain. ## What AuctionWorx Events Edition Is Built For Events Edition organizes inventory into structured catalogs linked to scheduled auction dates. RainWorx's [Events Edition overview](https://www.rainworx.com/EventsEdition) outlines a workflow centered on drafting lots, setting closing order, and auto-calculating staggered closing intervals so a sale concludes in an orderly, exciting sequence. You get tools like CSV batch importing for rapid cataloging, one-click copying of unsold lots into upcoming sales, and pre-publish validation checks. You can group lots to close in tandem or let them end individually, with active bidding triggering auto-extensions so buyers cannot snipe lots at the final second. If your auction calendar revolves around scheduled weekly, monthly, or seasonal events, this workflow fits that operational rhythm out of the box. You can explore how this functions on [our live auctions page](https://www.systenics.com/auctionworx/live-auctions/) or watch our [AuctionWorx demo walkthroughs](https://www.systenics.com/auctionworx/videos/). ## Enterprise vs Events Edition, Side by Side Dimension AuctionWorx Enterprise AuctionWorx Events Edition Sale format Individual listings with independent closing dates Scheduled auction events, cataloged lots, and staggered closing sequences Seller model Single seller or multi-vendor marketplace Single auction house managing scheduled sales Bidding mechanics Proxy bidding, reserves, buy-now, auto-extend, and quick bid Proxy bidding within timed events, closing groups, and auto-extend sniper protection Invoicing Standard sales invoicing, buyer checkout, batch invoice printing, and bulk generation Consolidated event invoicing tied directly to completed auction sales Typical use cases Always-on marketplaces, classifieds, and ongoing consignment inventory Estate liquidations, art sales, charity galas, and scheduled commercial auctions Running both together Some operators run a hybrid model: an always-open consignment marketplace paired with quarterly marquee auction events. Licensing both or bridging them into a unified experience is an architecture discussion our Squad helps clients navigate during initial planning. ## Which Industry Verticals Lean Which Way The right choice comes down to how your buyers and sellers actually transact, not just the physical goods you sell. Here is what our Squad sees across client projects: - **Auto dealers and wholesale lanes** with rolling arrivals and independent lot closings generally thrive on Enterprise's marketplace setup. - **Estate liquidators and benefit fundraisers** building a focused catalog for a single night or weekend gravitate toward Events Edition. - **Livestock operations** following a strict sale day calendar with ordered rings and lots fit neatly into Events Edition. - **Real estate auctions** marketing a curated portfolio that closes sequentially on auction day align well with Events Edition. - **Overstock, return, and surplus liquidators** moving large volumes of diverse merchandise continuously lean toward Enterprise. - **Antiques and collectibles dealers** split based on model: stores with steady, rolling arrivals pick Enterprise, while houses hosting curated monthly auctions pick Events Edition. Wondering how the platform compares to other tech stacks? Our [AuctionWorx alternatives guide](https://www.systenics.com/blogs/auctionworx-vs-alternatives-choosing-your-auction-platform/) breaks down licensing, customization, and long-term costs across the industry. ## What Our Squad Asks on a Discovery Call Before recommending an edition or writing a proposal, we walk through these practical questions: - Do your listings close independently, or does an entire catalog close together during a scheduled event? - Are you the sole seller, or do you need approved third parties listing inventory on your site? - Do you run on a recurring calendar of events, or is inventory added and purchased continuously? - Do you need consignor settlement sheets, tiered commissions, and automated vendor reporting? - Will buyers browse an open storefront daily, or register ahead of scheduled sale days? - Do you anticipate combining a continuous marketplace with periodic cataloged sales down the line? - What external systems (such as custom ERPs, payment gateways, tax calculation, or shipping carriers) must integrate with the site? Your answers clarify whether Enterprise, Events Edition, or a blended setup fits best, allowing us to scope your custom [AuctionWorx build](https://www.systenics.com/auctionworx/) accurately from day one. ## Frequently Asked Questions ### What is the difference between AuctionWorx Enterprise and AuctionWorx Events Edition? AuctionWorx Enterprise is built for individual listings with independent closing times, giving you an ongoing marketplace model that supports one seller or many. AuctionWorx Events Edition is built for scheduled auction events: lots are grouped into a cataloged sale with staggered, calculated closing times. ### Which AuctionWorx edition is right for a single-seller auction business? Either edition can run a single-seller business. Choose Enterprise if your listings close independently on a rolling basis throughout the week. Choose Events Edition if you group inventory into scheduled sales with a catalog of lots closing in sequence. ### Does AuctionWorx Events Edition support consignment sales? AuctionWorx Enterprise documents full consignment tools, including consignor statements, per-consignor fee tiers, and commission reporting. Confirm the current consignment feature set for Events Edition against RainWorx published feature pages before picking your edition. ### Can I run both AuctionWorx Enterprise and Events Edition? Yes. Operators who run an ongoing marketplace alongside periodic cataloged sales sometimes license both editions. They route inventory to whichever workflow fits the event. We can help you evaluate licensing and hosting architecture during discovery before you commit budget. ### Are AuctionWorx Enterprise reviews trustworthy for choosing an edition? Third-party reviews confirm that the platform is actively supported, but they rarely get into edition-level workflow differences. We recommend checking RainWorx official documentation or speaking with an experienced integration partner before deciding. Systenics is an authorized RainWorx Premium Partner with over 15 years of experience extending the AuctionWorx platform. Our Squad has architected, customized, and launched both Enterprise and Events Edition builds for auction businesses worldwide. Share your operational workflow with us, and we will help you map out the ideal platform configuration for a smooth, high-impact mission launch. [Connect for mission launch **](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) - [Barcode-based listing creation](https://www.systenics.com/auctionworx/barcode-listing-creation/) - [Industry solutions](https://www.systenics.com/solutions/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: The Complete Guide to AuctionWorx Customization: From Custom Bidding Engines to API Integrations URL: https://www.systenics.com/blogs/auctionworx-customization-guide-bidding-apis-architecture/ Description: A practical engineering blueprint for customizing AuctionWorx without breaking core upgradeability. Learn how our Squad builds custom bidding models, native mobile apps, and enterprise ERP integrations. # The Complete Guide to AuctionWorx Customization: From Custom Bidding Engines to API Integrations **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/), [*Customization*](https://www.systenics.com/blogs/tag/customization/), [*.NET*](https://www.systenics.com/blogs/tag/net/), [*Web Development*](https://www.systenics.com/blogs/tag/web-development/) Over the past 15+ years as a [RainWorx Premium Partner](https://www.systenics.com/auctionworx/), our Superhero Squad has worked inside virtually every corner of the AuctionWorx codebase. We have launched platforms on both Enterprise and Events editions, built specialized bidding workflows, and engineered deep enterprise integrations for auction businesses worldwide. If there is one universal truth we have learned across dozens of client missions (and plenty of rescue missions where corners were cut by inexperienced contractors), it is this: **AuctionWorx is an extraordinarily capable .NET auction foundation, but how you customize it dictates whether your marketplace thrives or stalls.** Whether you are planning to introduce proprietary bidding rules, connect enterprise inventory pipelines, or launch native mobile apps for iOS and Android, this guide outlines the architectural blueprint we use to build high-scale, upgrade-safe customizations. ## 1. The Foundation: Why Architectural Isolation is Non-Negotiable The single most expensive mistake an auction company can make is welding custom business logic directly into core platform files. When RainWorx releases security updates, performance improvements, or major feature versions, a platform with hardcoded core edits cannot be upgraded without days or weeks of manual, bug-prone file diffing. To ensure **100% Mission Success** and protect your long-term investment, every customization must follow a clean, modular extension model: - **Separate Assembly Architecture:** Maintain custom business logic, domain models, and external API clients in isolated class library assemblies without modifying the main web project directly. - **Event Handlers and Webhooks:** Tap into AuctionWorx lifecycle events (such as listing creation, invoice generation, or bid placement) using clean service hooks. - **Theming Discipline:** Customize UI and styling strictly through override views, partials, and dedicated CSS bundles without editing base system templates. Following this discipline ensures that when your core platform upgrades, your business-critical customizations remain intact, fully testable, and stable. ## 2. Engineering Custom Bidding Engines While standard English forward auctions work well for general consumer listings, high-volume B2B, wholesale, and specialized liquidation marketplaces often require distinct price-discovery mechanics: ### Dutch (Descending Price) Auctions In wholesale volume sales or perishable goods liquidation, sellers cannot wait days for a timer to wind down. With [Dutch Auctions](https://www.systenics.com/auctionworx/dutch-auctions/), the price begins high and steps down automatically at set intervals until a buyer claims the current price or the reserve floor is reached. Building this requires reliable timer routines and concurrency controls to prevent duplicate purchases when multiple bidders claim an item simultaneously. ### Make-an-Offer and Counter-Offer Workflows High-ticket assets like commercial vehicles or heavy industrial machinery frequently close through private negotiation instead of open bidding. Enhancing AuctionWorx with a Make-an-Offer workflow allows buyers to submit binding bids with custom validity windows, giving sellers the superpower to accept, decline, or counter in real time. ### Sealed-Bid and Tender Submissions For government surplus, real estate tenders, or confidential corporate disposals, sealed-bid functionality keeps submissions encrypted in the database until the auction closing time arrives, protecting market integrity and regulatory compliance. ## 3. Native Mobile Apps: Real-Time Bidding in Buyers' Pockets Mobile browsers are fine for casual browsing, but serious bidders demand instant push notifications. When an outbid notification arrives via standard email, the lot has often already closed before the buyer opens their inbox. Our white-label [AuctionWorx Mobile Apps for iOS and Android](https://www.systenics.com/auctionworx/mobile-apps/) connect directly to your AuctionWorx backend via REST APIs and SignalR. This gives your bidders: - **Sub-Second Push Notifications:** Instant alerts for outbid notifications, saved search matches, and ending-soon countdowns. - **Biometric Authentication:** Fast, frictionless sign-ins via Face ID and Touch ID to keep bidders in the action. - **Camera-Driven Lotting:** Mobile camera integration that lets consigner teams scan barcodes or snap high-res lot photos on the fly. ## 4. Enterprise Integrations and Inventory Pipelines An auction marketplace rarely operates in isolation. As lot volumes scale into the thousands, manual data entry quickly turns into an operational bottleneck. Integrating AuctionWorx with external systems streamlines your entire workflow: - **Automated Ingestion via Barcode Scanning:** Utilizing tools like our [Barcode Listing Creation Add-On](https://www.systenics.com/auctionworx/barcode-listing-creation/), intake teams can scan manufacturer UPC or EAN barcodes or vehicle VINs (using ChromeData integration) to populate specifications, retail values, and item photos in seconds. - **Bulk Inventory Ingestion:** The [Listings Creation Excel Plugin](https://www.systenics.com/auctionworx/listings-creation-excel-plugin/) lets operators prepare, validate, and publish hundreds of lots directly from spreadsheet workflows into AuctionWorx with one click. - **Warehouse Management and Logistics:** Connecting your bidding platform to a dedicated inventory system like [WHMSPro](https://www.systenics.com/auctionworx/warehouse-management/) synchronizes lot intake, bin and rack mapping, buyer pickup appointment scheduling, and automated carrier label generation with FedEx, UPS, and DHL. - **Payment and Identity Gateways:** Integration with Stripe, Authorize.Net, and automated escrow or split-payment services ensures frictionless post-sale settlement. ## 5. Transparent Pricing vs. The Hourly Black Hole One of the biggest frustrations auction operators express before coming to Systenics is unpredictable billing from agencies that charge open-ended hourly rates on an unfamiliar codebase. We do things differently. We publish our product and add-on pricing openly on our [AuctionWorx Pricing Page](https://www.systenics.com/auctionworx/pricing/). Every add-on includes complete deployment directly on your installation. When you require bespoke feature development, our Squad works through a structured 4-step process: - **Discovery and Ballpark:** Reviewing your business requirements and defining functional scope. - **Detailed Architecture and Mockups:** Mapping user journeys and database schemas so you know the full plan before code is written. - **Milestone-Based Build:** Iterative development with regular demos and milestone deliverables. - **Deployment and Ongoing Mission Support:** Full production rollout and long-term upgrade compatibility. ## Launch Your Custom AuctionWorx Mission Customizing AuctionWorx with the right architectural approach gives you an enterprise-grade auction platform tailored to your exact industry, without the multi-hundred-thousand-dollar risk of building from scratch. Whether you are modernizing an existing installation, building custom bidding models, or integrating native mobile apps, our Superhero Squad is ready to partner with you from concept to launch. [Connect for Mission Launch **](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) - [AuctionWorx mobile apps](https://www.systenics.com/auctionworx/mobile-apps/) - [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Auction Warehouse Operations: How to Automate Lot Intake, Bin Tracking, and Buyer Pickup Scheduling URL: https://www.systenics.com/blogs/auction-warehouse-management-lot-intake-pickup-scheduling/ Description: Discover how auction houses and liquidators eliminate post-sale fulfillment bottlenecks with mobile lotting, QR bin mapping, and self-service buyer pickup scheduling using WHMSPro. # Auction Warehouse Operations: How to Automate Lot Intake, Bin Tracking, and Buyer Pickup Scheduling **by:** Saurabh Nandu **in:** [General](https://www.systenics.com/blogs/category/general/) **tags:**[*AuctionWorx*](https://www.systenics.com/blogs/tag/auctionworx/), [*Warehouse Management*](https://www.systenics.com/blogs/tag/warehouse-management/), [*Logistics*](https://www.systenics.com/blogs/tag/logistics/), [*Operations*](https://www.systenics.com/blogs/tag/operations/) In the online auction and liquidation business, most operators focus 90% of their energy on attracting bidders and driving up hammer prices. But ask any warehouse manager or auctioneer who runs weekly events where the true headaches live, and they will tell you the same thing: **The real battle starts the moment the auction ends.** Five hundred winning bidders suddenly show up at your loading dock on a Saturday morning expecting immediate pickup. Consignors drop off hundreds of un-manifested items on mixed pallets that need to be photographed, cataloged, and staged in 48 hours. Staff members wander through rows of shelving searching for Lot #412 while frustrated customers wait in lines that stretch out the door. This operational friction is not just stressful; it directly erodes your profit margins. Here is how high-volume auction houses and liquidators transform post-sale chaos into a streamlined, high-throughput fulfillment workflow. ## Why Generic ERPs and Standard WMS Systems Fail at Auctions Many auction companies attempt to solve operational bottlenecks by deploying standard warehouse management software (WMS) built for traditional retail e-commerce. They quickly discover that standard warehouse software fundamentally misunderstands how auctions operate: - **Unique Lot Numbers vs. Standard SKUs:** Traditional e-commerce WMS assumes you hold 5,000 units of a single SKU in a fixed bin location. An auction warehouse holds thousands of unique, one-of-a-kind lots (often box-damaged goods, customer returns, antiques, or surplus items) that exist for only a single auction cycle. - **The Post-Auction Pickup Surge:** In retail e-commerce, fulfillment is spread evenly throughout the week via parcel carriers. In auctions, 80% of buyers choose local warehouse pickup, creating extreme foot traffic concentrated into tight 48-hour pickup windows. - **Consignor Intake Volatility:** Estate sales and overstock liquidations arrive without clean UPC barcodes or pre-printed packing slips. Intake teams must inspect, tag, and assign temporary storage in minutes. ## The Blueprint: 4 Pillars of a High-Velocity Auction Warehouse Over years of building unified auction ecosystems like [WHMSPro](https://www.systenics.com/auctionworx/warehouse-management/) and integrating them directly with [AuctionWorx](https://www.systenics.com/auctionworx/), our Squad has refined the 4 essential workflows every modern auction warehouse needs: ### 1. Mobile Intake: Turn Any Smartphone into a Lotting Terminal The traditional way of intaking consignments involves clipboards, desktop computers, and manual spreadsheet entry. It is slow, prone to clerical errors, and creates a massive delay between physical lot arrival and online publication. With mobile-first intake, warehouse personnel walk the floor with a smartphone or tablet: - Scan an incoming manufacturer barcode or instantly generate a unique Lot QR sticker on a mobile bluetooth label printer. - Snap item photos directly with the camera, automatically attaching them to the lot record. - Assign consigner attribution, condition grades, and reserve prices on the spot. ### 2. Dynamic Multi-Level Bin and Rack Mapping When an item is cataloged, where does it physically go? Stashing items wherever there is empty floor space guarantees missing items on pickup day. A dedicated auction WMS organizes physical facilities into clear hierarchical locations: ``` Warehouse → Zone (e.g., High-Value / Pallet Racks) → Aisle → Rack → Shelf → Bin ``` When intake staff scans a lot, they scan the shelf QR code to bind the item to that exact location. If an item needs to be moved to a holding area or staging zone before pickup, a quick scan of the lot followed by the new bin instantly updates the system in real time. ### 3. Eliminating Loading Dock Gridlock: Self-Service Buyer Pickup Scheduling The worst customer experience in the auction industry is having 50 winning bidders arrive simultaneously, overwhelming warehouse staff and blocking parking lots. The solution is automated, self-service appointment scheduling: - When an invoice is paid, the winning bidder automatically receives a secure link to schedule their pickup appointment. - The system caps appointment slots per 15-minute window based on warehouse staff capacity and loading bay availability. - Warehouse teams receive advance picking lists organized by appointment time, allowing them to pre-pull and stage lots in staging bays *before* the buyer arrives. - When the buyer pulls up, staff verifies the digital pickup QR code, hands over the pre-staged items, and marks the invoice fulfilled in seconds with zero paper receipts. ### 4. Multi-Carrier Shipping Automation For non-local winning bidders who require shipping, packing and calculating freight cannot be an afterthought. Integrating direct API carrier connectivity (FedEx, UPS, USPS, DHL, and LTL freight brokers) allows warehouse staff to: - Weigh and measure packed lots with integrated digital scales. - Compare real-time negotiated shipping rates across carriers. - Print shipping labels directly from the order screen and automatically push tracking numbers to the buyer's account and email notifications. ## Real-Time Inventory Synchronization with AuctionWorx A warehouse management system should never be an isolated silo. By directly linking [WHMSPro](https://www.systenics.com/auctionworx/warehouse-management/) with your [AuctionWorx](https://www.systenics.com/auctionworx/) platform: - Unsold lots can be immediately rolled over into the next scheduled auction or shifted into fixed-price buy-now inventory without re-cataloging. - Consignor settlement reports calculate final hammer prices minus commissions and storage handling fees automatically. - Real-time dashboard analytics give managers complete visibility into inventory aging, storage occupancy rates, and fulfillment velocity. ## Transform Your Auction Fulfillment Operations Stop letting post-sale fulfillment chaos cap your auction marketplace growth. Whether you run weekly estate sales, commercial vehicle auctions, or liquidation surplus, our Superhero Squad can help you deploy an end-to-end warehouse and logistics workflow that scales with your ambition. [Connect for Mission Launch **](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard) ## Related pages on Systenics - [AuctionWorx platform overview](https://www.systenics.com/auctionworx/) - [Warehouse management capabilities](https://www.systenics.com/auctionworx/warehouse-management/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Adding Bootstrap based Responsive Carousel to Umbraco 7 URL: https://www.systenics.com/blogs/adding-bootstrap-based-responsive-carousel-to-umbraco-7/ Description: Image Sliders and Carousels are very popular elements for building any kind of modern websites. There are several JQuery based scripts available which provide a wide variety of features for building the carousel element. In this blog post I’ll illustrate how easy it is to implement bootstrap based carousel for your website. This blog post with build on my previous blog post Create a Responsive, Fluid HTML5/CSS3 based website on Umbraco 7 using Bootstrap 3.0 Framework where I have integrated bootstrap 3.0.1 with Umbraco 7. This example can be extended to use your own JQuery based slider script. # Adding Bootstrap based Responsive Carousel to Umbraco 7 **by:** Saurabh Nandu **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*ASP.NET MVC*](https://www.systenics.com/blogs/tag/aspnet-mvc/), [*Umbraco*](https://www.systenics.com/blogs/tag/umbraco/), [*Bootstrap*](https://www.systenics.com/blogs/tag/bootstrap/) Image Sliders and Carousels are very popular elements for building any kind of modern websites. There are several JQuery based scripts available which provide a wide variety of features for building the carousel element. In this blog post I'll illustrate how easy it is to implement bootstrap based carousel for your website. This blog post will build on my previous blog post [Create a Responsive, Fluid HTML5/CSS3 based website on Umbraco 7 using Bootstrap 3.0 Framework](https://www.systenics.com/blogs/create-a-responsive-fluid-html5css3-based-website-on-umbraco-7-using-bootstrap-30-framework/) where I have integrated bootstrap 3.0.1 with Umbraco 7. This example can be extended to use your own JQuery based slider script. ## Adding Carousel Images Tab to Home document type There are various ways to implement Carousel support in Umbraco. There are a few predefined packages which are also available which provide easy support for integrating Carousels into your website. The approach that I have taken is the simplest one that I have found from the end users (content editors) perspective, so that its intuitive for the content editors to swap images on their own without understanding Umbraco in detail. Although this means that only basic support for showing images in carousel is supported. If you want the ability for the user to be able to provide captions and text for each image then you would have to take a different approach. I am assuming you have downloaded the sample from my [previous blog post](https://www.systenics.com/blogs/create-a-responsive-fluid-html5css3-based-website-on-umbraco-7-using-bootstrap-30-framework/) where I have integrated Bootstrap 3.0.1 with Umbraco 7. Load the project in Visual Studio and launch the site in your browser, which would show you the default Jumbotron homepage I built in the last blog post. Navigate to the Umbraco control panel by going to the URL [ [http://localhost:55679/umbraco](http://localhost:55679/umbraco) ] where the port number can change based on your IIS Express setting. Enter the credentials **root** and **@123test** and login to the Umbraco Control Panel. The first thing that we need to do is edit the Home page document type to add a new Tab with ability to accept images. Click on **Settings** → expand **Document Types** → **[PageBase]** →**Home** to load the **Home** Document Type. Switch to the **Tabs** tab and add a **New Tab** called**Carousel**. Now switch to the **Generic Properties** tab and add a new Property with the following settings given below and save it. Name: carouselImages Alias: carouselImages Type: Multiple Media Picker Tab: Carousel ## Modify the Home template to include Carousel Once the new Tab is added to the Document Type we need to update the template of the Home page to include code for the Carousel. Go to Settings → expand Templates → [PageBase] → Home to load the Home template in the Umbraco editor. Replace the template code with code listing 1 shown below. I have improvised the HTML which is provided as a Bootstrap sample and integrated it with Umbraco. ``` @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @{ Layout = "PageBase.cshtml"; } @section jumbotron{

    @Umbraco.Field("homePrimaryMessageTitle")

    @Umbraco.Field("homePrimaryMessageContent")

    Learn more »

    } @section content{ @if (Model.Content.HasValue("carouselImages")) { var imagesList = Model.Content.GetPropertyValue("carouselImages").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse); var imagesCollection = Umbraco.TypedMedia(imagesList).Where(x => x != null); }

    @Umbraco.Field("homeSecondaryMessageTitle1")

    @Umbraco.Field("homeSecondaryMessageContent1")

    View details »

    @Umbraco.Field("homeSecondaryMessageTitle2")

    @Umbraco.Field("homeSecondaryMessageContent2")

    View details »

    @Umbraco.Field("homeSecondaryMessageTitle3")

    @Umbraco.Field("homeSecondaryMessageContent3")

    View details »

    } ``` Listing 1: Home template In the above listing 1 for the **Home** template, I have modified the template from the previous blog to include the code to build the carousel. The HTML for the carousel is directly used from the sample provided on Bootstrap website. Within the **content** section I have added the Razor syntax for showing the carousel if there are images added to the **Home** document. There are two loops provided one to build the navigation icons and another to build the images, pretty standard stuff. Click on the **Save** button to save the template. This completes our effort to add the carousel using bootstrap its pretty simple in Umbraco 7. ## Uploading Carousel Images To get the carousel in action we need to upload images and publish them. Go to **Content** → **Home** → **Carousel** tab to open properties for the Home page as shown in figure 1 below. Figure 1: Upload Carousel Images Click on the + sign as shown in figure 1 above to bring the media slider. In the media slider you can either upload a new image or select from one of the existing images. The circled upload button needs to be clicked to upload new files, they get automatically added to the Umbraco media folder. Once you have uploaded your preferred images, select them and click the **Select** button on the Media picker to add it to our Carousel. In general the images should be 1170x500 in dimensions so that they show with maximum resolution, Bootstrap automatically scales down the image container for responsive viewing. Click **Save and publish** button on the Home page to save the images and publish the carousel. Figure 2 below shows the published carousel page. Figure 2: Bootstrap based responsive Carousel In this short blog post you have seen how easy it is to use the new Bootstrap with Umbraco 7 to build a responsive carousel. ## Download [Click here](https://www.systenics.com/media/CarouselUmbraco7.zip) to download the project for this blog. ## Related pages on Systenics - [AI-powered listing description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) - [AuctionWorx development and customization](https://www.systenics.com/auctionworx/development-and-customization/) - [AuctionWorx products](https://www.systenics.com/products/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). --- ## Page: Add Images along with Text using Document Types and Partial View in Umbraco 7 URL: https://www.systenics.com/blogs/add-images-along-with-text-using-document-types-and-partial-view-in-umbraco-7/ Description: While creating an Umbraco site, I came across the need for displaying images along with additional text information which can be setup and managed using Umbraco CMS administration tool. In this blog post, I will explain how to create Document Types and Partial View for a Umbraco 7 website using MVC to display the details. # Add Images along with Text using Document Types and Partial View in Umbraco 7 **by:** Juilie Bhoir **in:** [Programming](https://www.systenics.com/blogs/category/programming/) **tags:**[*Umbraco*](https://www.systenics.com/blogs/tag/umbraco/) While creating an Umbraco site, I came across the need for displaying images along with additional text information which can be setup and managed using Umbraco CMS administration tool. In this blog post, I will explain how to create Document Types and Partial View for a Umbraco 7 website using MVC to display the details. This article assumes that you already have knowledge about [installation of Umbraco 7](https://www.systenics.com/blogs/setting-up-umbraco-7-in-visual-studio-2013-for-mvc-4-development/) and have configured its rendering engine to use ASP.NET MVC for the pages. ## Create Document Type In Umbraco CMS administration tool, click on **Settings** section and right-click on **Document Types** to create a new document named as **TeamMemberPage**. Let **Master Document Type** be set to **None** and **Create matching template** be checked (refer figure 1). ## Settings > Document Types > TeamMembersPage Figure 1: Create new Document Type 'TeamMemberPage' ## Structure For TeamMemberPage Now click on **TeamMemberPage** document type and switch to **Structure** tab and set the checkbox for **Allow at root** option (refer figure 2). Figure 2: Create root element ## Creating 'MemberListing' Document Type under TeamMembersPage Next step is to create document type for listing team members which will have the properties such as member photo, member name and member designation. Right-click on **TeamMembersPage document type** to create a new document named as **MemberListing** (refer figure 3). Figure 3: Create new Document Type 'MemberListing' Switch to the Tabs section and add a new tab 'Content' then switch to the Generic properties and click on the **Click here to add a new property** link to add the 3 properties as listed below and **save** them (refer figure 4 – 7). Figure 4: Create new Tab 'Content' Name: MemberPhoto Alias: memberPhoto Type: Media Picker Tab: Content Figure 5: MemberPhoto property Name: MemberName Alias: memberName Type: Textstring Tab: Content Figure 6: MemberName property Name: MemberDesignation Alias: memberDesignation Type: Textstring Tab: Content Figure 7: MemberDesignation property ## Add another document type 'MemberList' Next step is to create document type MemberList which will enable to add multiple member details for the page. Right-click on **TeamMembersPage document type** to create a new document named as **MemberList** (refer figure 8). Figure 8: Create new document type 'MemberList' ## Structure for MemberList Now click on **MemberList** document type and switch to **Structure** tab and set the checkbox for **Enable List View** option and also select 'MemberListing' document type as Allowed child nodetypes (refer figure 9). Figure 9: Structure for 'MemberList' ## Make member list as child node for TeamMemberPage Next step is to add MemberList as child nodetype for TeamMembersPage. For this step, click on Settings > TeamMembersPage Switch to Structure tab and select MemberList as Allowed child nodetypes (refer figure 10). Figure 10: Structure for 'TeamMembersPage' After creating all necessary document types, the next step is to add content to the site. ## Add Content Click on Content and select TeamMembersPage which is the root element of the site. Insert proper name for the content and click on Save and publish (refer figure 11 and 12). Figure 11: Add content 'TeamMembersPage' Figure 12: Save 'Team Member Page' Next step is to create content under TeamMembersPage for inserting team member details. Click on Content > Team Member Page then select MemberList, give a proper name to MemberList and click on Save and Publish (refer figure 13 and 14). Figure 13: Add content 'MemberList' Figure 14: Save content 'Team Members' Next step is to insert details for the MemberList. Click on Content > Team Members, under Child Items tab click on Create and select MemberListing (refer figure 15). Figure 15: Create 'MemberListing' elements ## Enter your Team details After selecting MemberListing the following screen will be displayed with the properties like Member Photo, Member Name and Member Designation. Add required details in the appropriate fields and then click on Save and publish (refer figure 16). Figure 16: Save Member Details After the first record is created, the following screen is displayed which will list down all the records (refer figure 17). Figure 17: List of records Above steps are required to add the required content from Umbraco CMS administration tool and below is the code which will loop through the contents and display it on the site. Right click **Partial Views** under **Settings** and select **Create** from the menu. In the **Create** dialog give the **Name** as **GenerateTeamMemberList** and set choose a snippet as Empty and click **Create** to create the Partial view and open its editor. Copy-paste the following code into the editor and click the **Save** button to save the partial view. ``` @inherits Umbraco.Web.Mvc.UmbracoViewPage @using System.Collections; @{ Layout = null; var parent = Model.AncestorOrSelf(1); List nodeIds = new List(); foreach (var page in parent.Children) { if (page.DocumentTypeAlias == "MemberList") { foreach (var child in page.Children) { nodeIds.Add(child.Id); } } } List slides = new List(); foreach (var nodeId in nodeIds) { if (nodeId != null) { var publishedContent = Umbraco.NiceUrl(Convert.ToInt32(nodeId)); if (!String.IsNullOrEmpty(publishedContent) && publishedContent != "#") { slides.Add(Umbraco.TypedContent(nodeId)); } } } foreach (var slide in slides) { if (slide != null) {
    @if(slide.GetPropertyValue("memberPhoto")!=null) { }
    @Html.Raw(slide.GetPropertyValue("memberName"))

    @Html.Raw(slide.GetPropertyValue("memberDesignation"))

    } } } ``` To use this partial view, include it in your TeamMembersPage using the following code. ``` @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @using ClientDependency.Core.Mvc; @{ Layout = null; }
    @Html.Partial("GenerateTeamMemberList",@Model.Content)
    ``` ## Published Team Members Page Figure 18: Image displayed along with Text You can use this approach to create a jQuery image carousel or a photo album. ## Related pages on Systenics - [AI-powered listing description generation](https://www.systenics.com/auctionworx/ai-enhanced-listings-description-generation/) ## Need help implementing this for your business? Our team helps plan, build, and scale marketplace and auction workflows. Explore [industry solutions](https://www.systenics.com/solutions/), [platform products](https://www.systenics.com/products/), and [custom development services](https://www.systenics.com/auctionworx/development-and-customization/) tailored to your goals. [Book a quick consultation](https://outlook.office.com/bookwithme/user/231015685f21467da5ef6e3eb8b50240@systenics.com/meetingtype/hbYq2z1Hj0C2e7DuwBqdnw2?anonymous&ep=mcard). ---