Implement Document Signing in the Browser

Clients can't sign contracts immediately — you lose deals. Signing documents right in the browser cuts the deal cycle by 3–4 times and eliminates document loss. Unlike ready-made services, our solution is fully customizable to your workflow. It integrates with your existing infrastructure and provid

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1320
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1276
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1019
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1074
  • Website development for SBH Partners
    Website development for SBH Partners
    1137
  • Website development for Red Pear
    Website development for Red Pear
    575

Clients can't sign contracts immediately — you lose deals. Signing documents right in the browser cuts the deal cycle by 3–4 times and eliminates document loss. Unlike ready-made services, our solution is fully customizable to your workflow. It integrates with your existing infrastructure and provides the required level of legal validity. A custom solution costs 3 times less at 1000 signatures per month — no monthly per-user subscriptions. Typical services often fail to handle complex workflows: approval chains, parallel signing, 1C integration. We solve these challenges based on 10+ years of experience in document flow development. Contact us — we will evaluate your project within one business day.

Why Browser Signing Is Better Than Ready-Made Services?

Ready-made services (DocuSign and others) offer standard functionality but fall short in three key areas: cost, customization, and legal compliance.

Criteria Ready-Made Service Our Custom Solution
Design customization Limited (branding, not full UX) Full — embedded in your interface without redirects
CRM/ERP integration Via paid API or ready-made connectors REST API adapted to your stack in 1–2 days
Signing workflow Linear, vendor-defined Any: sequential, parallel, hierarchical
Legal validity Suitable for international documents, but local requirements may not be met Full compliance with Russian legislation (Federal Law No. 63-FZ) with audit log

How Electronic Signature Levels Work?

Electronic signatures differ in legal weight. We implement all three levels — from simple to qualified.

Level Confirmation Method Legal Effect Typical Scenarios
Simple ES Login/password, SMS code Weak, suitable for internal EDI Consent to offer, internal documents
Enhanced non-qualified Drawn signature, cryptographic hash Medium, requires mutual agreement B2B contracts, commercial proposals
Enhanced qualified (QES) Certified cryptographic protection Full, equivalent to handwritten signature Government contracts, banks

Most 'browser signing' scenarios are covered by simple or enhanced non-qualified ES. QES requires an additional plugin or token, but we integrate it as well.

How We Implement Signing: Tech Stack and Steps

The signing process consists of several steps:

  1. The user opens the document in the browser. We use the react-pdf-viewer library with custom logic that requires viewing all pages. This blocks signing until the entire document is reviewed.
  2. After viewing, the user enters their signature — drawn with the mouse or typed text. If SMS verification is needed, they enter the code from the message.
  3. The browser sends data to the server: signature image and metadata (IP, user-agent, time). The server computes the document hash, embeds the signature using pdf-lib, and saves the signed version.
  4. The server generates an audit log and sends notifications to the parties. The document status changes to 'signed'.
Example of signature embedding in PDF
// Backend: processing signed document async function processDocumentSignature(documentId, userId, signatureDataUrl, metadata) { const document = await db.documents.findByPk(documentId); // 1. Load original PDF const originalPdf = await s3.getObject({ Bucket: BUCKET, Key: document.s3Key }).promise(); // 2. Compute hash of original for audit log const originalHash = crypto.createHash('sha256').update(originalPdf.Body).digest('hex'); // 3. Embed signature const { PDFDocument, rgb } = require('pdf-lib'); const pdfDoc = await PDFDocument.load(originalPdf.Body); const lastPage = pdfDoc.getPages().at(-1); // Add signature image const signatureImage = await pdfDoc.embedPng( Buffer.from(signatureDataUrl.replace(/^data:image\/png;base64,/, ''), 'base64') ); lastPage.drawImage(signatureImage, { x: 60, y: 50, width: 150, height: 50 }); // Add text stamp const font = await pdfDoc.embedFont('Helvetica'); lastPage.drawText( `Signed: ${metadata.signerName}\n${metadata.signedAt.toISOString()}\nIP: ${metadata.ip}`, { x: 60, y: 30, size: 8, font, color: rgb(0.4, 0.4, 0.4) } ); const signedPdfBytes = await pdfDoc.save(); // 4. Save signed version const signedKey = `signed/${documentId}/${userId}.pdf`; await s3.putObject({ Bucket: BUCKET, Key: signedKey, Body: signedPdfBytes }).promise(); // 5. Record in DB await db.documentSignatures.create({ documentId, signerId: userId, signatureImageUrl: signatureDataUrl, originalHash, signedDocumentKey: signedKey, metadata: { ip: metadata.ip, userAgent: metadata.userAgent, signedAt: new Date() }, }); return signedKey; } 

SMS Confirmation as Simple ES

For legally significant consents, we use SMS confirmation. The code hash is stored in Redis with a TTL of 5 minutes. The code is sent to the phone, the user enters it on the site. After verification, the signature is recorded. This approach reduces costs by 40% compared to QES.

// Generate and send code async function initiateSmsSigning(documentId, userId, phone) { const code = Math.random().toString(36).substring(2, 8).toUpperCase(); const codeHash = bcrypt.hashSync(code, 10); await redis.setex( `sms_sign:${documentId}:${userId}`, 300, // 5 minutes JSON.stringify({ codeHash, phone, attempts: 0 }) ); await smsService.send(phone, `Document signing code: ${code}. Valid for 5 minutes.`); } // Verify code and record signature async function confirmSmsSigning(documentId, userId, code) { const stored = JSON.parse(await redis.get(`sms_sign:${documentId}:${userId}`)); if (!stored || !bcrypt.compareSync(code, stored.codeHash)) { throw new Error('Invalid code'); } await redis.del(`sms_sign:${documentId}:${userId}`); await createSignatureRecord(documentId, userId, 'sms', { phone: stored.phone }); } 

Multi-Party Signing: Workflow for Multiple Parties

Often a document requires signatures from several participants (e.g., contract between client and contractor). We implement a sequential workflow: Party A signs → document gets status partially_signed → system sends notification to Party B with a signing link → Party B signs → status fully_signed. Both parties receive the final PDF by email. 95% of users sign the document on the first attempt, and the approval time shrinks from 3 days to 1 hour. If needed, we add parallel signing or notifications via Telegram/WhatsApp. The workflow supports up to 10 signers.

What's Included

  • Analysis of your business process and legal requirements
  • Designing the signing workflow (single, multi, hierarchical)
  • Frontend component development (PDF viewer, signature input)
  • Backend logic (signature embedding, audit log generation, storage)
  • Integration with SMS gateway or cryptographic protection (if needed)
  • Integration with your CRM/ERP via REST API
  • API and administration documentation
  • Testing (load, legal)
  • Deployment and one month of post-launch support

Timelines and How to Order

Estimated timelines:

  • Basic implementation (viewing + drawn signature) — from 5 business days.
  • SMS confirmation — additional 1–2 days.
  • Multi-party signing with workflow — 3–4 days.

Get a consultation — we'll choose the optimal architecture for your project. Order document signing implementation today.