{"id":149,"date":"2026-10-25T19:05:29","date_gmt":"2026-10-25T16:05:29","guid":{"rendered":"https:\/\/qcoders.com\/work\/ai-document-assistant\/"},"modified":"2026-11-02T09:00:48","modified_gmt":"2026-11-02T07:00:48","slug":"ai-document-assistant","status":"publish","type":"page","link":"https:\/\/qcoders.com\/ar\/work\/ai-document-assistant\/","title":{"rendered":"\u0645\u0633\u0627\u0639\u062f \u0627\u0644\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0627\u0644\u0630\u0643\u064a"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"149\" class=\"elementor elementor-149\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5d282be1 e-con-full elementor-hidden-desktop elementor-hidden-tablet e-flex e-con e-parent\" data-id=\"5d282be1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5c3e7cc8 elementor-widget elementor-widget-html\" data-id=\"5c3e7cc8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<style>\n.qcm{--ink:#0A0E17;--step:#131A27;--line:#232C3D;--paper:#F6F5F0;--mute:#A9AEB8;--volt:#C8F53B;--pad:20px;--sec:88px;\n  --sans:\"Readex Pro\",system-ui,sans-serif;--mono:\"JetBrains Mono\",ui-monospace,monospace}\n.qcm *{box-sizing:border-box;margin:0;padding:0}\n.qcm{background:var(--ink);color:var(--paper);font-family:var(--sans);font-weight:400;line-height:1.45;overflow-x:hidden;overflow-x:clip;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%}\n.qcm img{display:block;max-width:100%;height:auto}\n.qcm a{color:inherit;text-decoration:none}\n.qcm ul,.qcm ol{list-style:none}\n.qcm section[id]{scroll-margin-top:72px}\n.qcm .label{font-family:var(--mono);font-size:12px;letter-spacing:.02em;color:var(--volt);font-weight:500;line-height:1.4}\n.qcm .label.dim{color:var(--mute)}\n.qcm .label[data-l]::before{content:attr(data-l)}\n.qcm .dtag[data-tag]::after{content:attr(data-tag)}\n.qcm .hero{padding:28px var(--pad) 0;position:relative}\n.qcm h1{font-weight:700;font-size:clamp(44px,13.4vw,56px);line-height:.95;letter-spacing:-.035em;margin-top:12px;text-wrap:balance}\n.qcm h1 em,.qcm h2 em,.qcm .big em{font-style:normal;color:var(--volt)}\n.qcm .lead{font-size:17px;line-height:1.45;color:var(--mute);margin-top:16px;max-width:350px}\n.qcm .btns{display:flex;gap:10px;margin-top:22px}\n.qcm .btn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:8px;height:52px;border-radius:12px;font-weight:600;font-size:16px;padding:0 16px}\n.qcm .btn svg{width:20px;height:20px}\n.qcm .btn.volt-b{background:var(--volt);color:var(--ink)}\n.qcm .btn.ink{background:var(--ink);color:var(--paper);margin-top:22px;width:100%}\n.qcm .btn.line{border:1.5px solid var(--line);color:var(--paper);flex:0 0 auto}\n.qcm .sh{padding:var(--sec) var(--pad) 22px}\n.qcm .sh-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px}\n.qcm .sh h2{font-size:38px;line-height:1;letter-spacing:-.03em;font-weight:700;margin-top:10px;text-wrap:balance}\n.qcm .sh .count{font-family:var(--mono);font-size:12px;color:var(--mute);white-space:nowrap;}\n.qcm .sh .intro{font-size:16px;color:var(--mute);margin-top:14px;max-width:350px}\n.qcm .volt{background:var(--volt);color:var(--ink);margin-top:var(--sec);padding:40px var(--pad) 40px}\n.qcm .volt .label{color:var(--ink);opacity:.75}\n.qcm .volt .big{font-size:36px;line-height:1.02;letter-spacing:-.035em;font-weight:700;margin-top:12px;text-wrap:balance}\n.qcm .volt p{font-size:17px;line-height:1.4;margin-top:14px;max-width:340px}\n.qcm .rows{border-top:1px solid var(--line)}\n.qcm .rows>li{display:grid;grid-template-columns:34px 1fr;gap:8px;padding:22px var(--pad) 24px;border-bottom:1px solid var(--line)}\n.qcm .rows .n{font-family:var(--mono);font-size:12px;color:var(--volt);padding-top:9px}\n.qcm .rows h3{font-size:28px;line-height:1.05;letter-spacing:-.025em;font-weight:600;text-wrap:balance}\n.qcm .rows.xl h3{font-size:34px;letter-spacing:-.03em}\n.qcm .rows p{font-size:15px;color:var(--mute);margin-top:8px;line-height:1.45}\n.qcm .rows .you{color:var(--paper);font-size:17px;line-height:1.35;font-weight:500}\n.qcm :is(.rows,.qcm .steps) .proof{display:inline-flex;align-items:center;gap:8px;margin-top:14px;font-family:var(--mono);font-size:13px;color:var(--volt);min-height:24px}\n.qcm :is(.rows,.qcm .steps) .proof svg{width:16px;height:16px}\n.qcm .rows .links{margin-top:12px;font-size:15px;color:var(--mute)}\n.qcm .rows .links a{color:var(--paper);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--volt)}\n.qcm .form-note{padding:18px var(--pad) 0;font-size:14px;line-height:1.45;color:var(--mute)}\n.qcm .form-note a{color:var(--paper);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--volt)}\n.qcm .rows .crop,.qcm .rows .dk,.qcm .rows .ph{margin-top:18px}\n.qcm .dk{position:relative;border-radius:12px;overflow:hidden;background:var(--step);box-shadow:0 24px 50px -24px rgba(0,0,0,.8),0 0 0 1px rgba(246,245,240,.09)}\n.qcm .dk img{width:100%}\n.qcm .ph{position:relative;border-radius:24px;overflow:hidden;border:5px solid #1c2433;background:var(--step);aspect-ratio:390\/844;box-shadow:0 24px 50px -20px rgba(0,0,0,.8),0 0 0 1px rgba(246,245,240,.08)}\n.qcm .ph img{width:100%;height:100%;object-fit:cover;object-position:top}\n.qcm .crop{position:relative;overflow:hidden;border-radius:12px;background:var(--step);box-shadow:0 0 0 1px rgba(246,245,240,.09);min-height:0}\n.qcm .crop img{position:absolute;max-width:none;width:var(--zw);height:auto;left:var(--zx);top:var(--zy)}\n.qcm .cap{font-family:var(--mono);font-size:12px;color:var(--mute);margin-top:12px;line-height:1.45}\n.qcm .cap a{color:var(--paper);text-decoration:underline;text-underline-offset:3px;text-decoration-color:rgba(246,245,240,.35)}\n.qcm .duo{position:relative;margin:28px 0 0;aspect-ratio:390\/318}\n.qcm .hero .duo,.qcm .steps .duo{margin:28px calc(var(--pad) * -1) 0}\n.qcm .duo .dk{position:absolute;left:0;top:0;width:80%;border-radius:0 12px 12px 0}\n.qcm .duo .ph{position:absolute;right:5%;top:14%;width:33%}\n.qcm .fig{padding:0 var(--pad)}\n.qcm .dtag{position:absolute;left:var(--pad);bottom:10%;font-family:var(--mono);font-size:11px;background:var(--ink);border:1px solid rgba(200,245,59,.5);color:var(--volt);padding:5px 9px;border-radius:6px}\n.qcm .pair{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:0 var(--pad)}\n.qcm .pair>figure:last-child{margin-top:44px}\n.qcm .facts{display:grid;grid-template-columns:1fr 1fr 1fr;margin:24px var(--pad) 0;border-top:1.5px solid var(--line)}\n.qcm .facts div{padding:12px 0 0;font-size:13px;line-height:1.3;color:var(--mute)}\n.qcm .facts div+div{padding-left:12px;border-left:1px solid var(--line)}\n.qcm .facts b{display:block;font-size:22px;font-weight:700;letter-spacing:-.02em;color:var(--paper)}\n.qcm .points{margin:22px var(--pad) 0;border-top:1px solid var(--line)}\n.qcm .points li{padding:14px 0;border-bottom:1px solid var(--line)}\n.qcm .points b{display:block;font-size:18px;font-weight:600;letter-spacing:-.01em;line-height:1.2}\n.qcm .points span{display:block;font-size:15px;color:var(--mute);margin-top:4px}\n.qcm .dl{margin:24px var(--pad) 0;border-top:1px solid var(--line)}\n.qcm .dl div{display:grid;grid-template-columns:92px 1fr;gap:12px;padding:14px 0;border-bottom:1px solid var(--line)}\n.qcm .dl dt{font-family:var(--mono);font-size:12px;color:var(--volt);padding-top:3px}\n.qcm .dl dd{font-size:16px;line-height:1.4}\n.qcm .idx{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:26px}\n.qcm .idx a{display:flex;flex-direction:column;justify-content:space-between;min-height:84px;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:var(--step)}\n.qcm .idx b{font-size:19px;font-weight:600;letter-spacing:-.015em;line-height:1.1}\n.qcm .idx small{font-family:var(--mono);font-size:11px;color:var(--mute)}\n.qcm .idx small i{font-style:normal;color:var(--volt)}\n.qcm .chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}\n.qcm .chips li,.qcm .chips a{font-size:14px;padding:7px 12px;border:1px solid var(--line);border-radius:99px;color:var(--paper);line-height:1.3}\n.qcm .chips a{display:inline-flex;align-items:center;min-height:40px}\n.qcm .tiles{display:flex;flex-direction:column;gap:14px}\n.qcm .tile{display:block;position:relative;background:var(--step);overflow:hidden}\n.qcm .tile .pic{position:relative;aspect-ratio:16\/10;overflow:hidden}\n.qcm .tile .pic img{width:100%;height:100%;object-fit:cover;transition:transform .6s cubic-bezier(.2,.7,.2,1)}\n.qcm .tile .meta{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px var(--pad) 20px}\n.qcm .tile .tt{font-size:24px;line-height:1.1;letter-spacing:-.02em;font-weight:600;margin-top:6px;color:var(--paper)}\n.qcm .tile .tl{display:block;font-size:15px;color:var(--mute);margin-top:8px;line-height:1.4}\n.qcm .go{flex:0 0 44px;width:44px;height:44px;border-radius:50%;background:var(--volt);color:var(--ink);display:grid;place-items:center;margin-top:4px}\n.qcm .go svg{width:20px;height:20px}\n.qcm .tile .num{position:absolute;top:12px;left:12px;z-index:2;font-family:var(--mono);font-size:11px;background:rgba(10,14,23,.82);color:var(--paper);padding:5px 8px;border-radius:6px}\n.qcm .tile.flip .meta{flex-direction:row-reverse}\n.qcm .tile.flip .meta>div{text-align:right}\n.qcm .tile.flip .go{background:transparent;border:1.5px solid var(--volt);color:var(--volt)}\n.qcm .tile:active .pic img{transform:scale(1.03)}\n.qcm .tile[hidden]{display:none}\n.qcm .flt{display:flex;flex-wrap:wrap;gap:6px;margin-top:24px}\n.qcm .flt button{font:500 14px\/1 var(--sans);color:var(--paper);background:transparent;border:1px solid var(--line);border-radius:99px;height:40px;padding:0 13px;cursor:pointer}\n.qcm .flt button[aria-pressed=true]{background:var(--volt);border-color:var(--volt);color:var(--ink)}\n.qcm .flt button:focus-visible,.qcm .qa summary:focus-visible,.qcm a:focus-visible{outline:2px solid var(--volt);outline-offset:2px}\n.qcm .steps{border-top:1px solid var(--line)}\n.qcm .steps>li{padding:24px var(--pad) 26px;border-bottom:1px solid var(--line)}\n.qcm .steps .top{display:flex;align-items:baseline;gap:12px}\n.qcm .steps .n{font-family:var(--mono);font-size:12px;color:var(--volt)}\n.qcm .steps h3{font-size:30px;line-height:1.05;letter-spacing:-.025em;font-weight:600;text-wrap:balance}\n.qcm .steps p{font-size:15px;color:var(--mute);margin-top:10px}\n.qcm .steps .side{display:grid;grid-template-columns:1fr 128px;gap:16px;align-items:start}\n.qcm .steps .side .ph,.qcm .steps .side .crop{margin-top:4px}\n.qcm .steps .wide{margin-top:18px}\n.qcm .steps.giant h3{font-size:clamp(52px,16vw,64px);line-height:.95;letter-spacing:-.04em;font-weight:700}\n.qcm .steps.giant .you{font-size:18px;color:var(--paper);font-weight:500;line-height:1.35;margin-top:12px}\n.qcm .nav{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}\n.qcm .nav a{display:inline-flex;align-items:center;min-height:40px;padding:0 14px;border:1px solid var(--line);border-radius:99px;font-size:14px}\n.qcm .qa{border-top:1px solid var(--line)}\n.qcm .qa details{border-bottom:1px solid var(--line)}\n.qcm .qa summary{list-style:none;display:grid;grid-template-columns:1fr 28px;gap:14px;align-items:start;padding:18px var(--pad);cursor:pointer}\n.qcm .qa summary::-webkit-details-marker{display:none}\n.qcm .qa summary h3{font-size:18px;line-height:1.3;font-weight:500;letter-spacing:-.01em}\n.qcm .qa summary svg{width:22px;height:22px;color:var(--volt);margin-top:1px;transition:transform .25s ease}\n.qcm .qa details[open] summary svg{transform:rotate(45deg)}\n.qcm .qa details[open] summary h3{color:var(--volt)}\n.qcm .qa .ans{padding:0 var(--pad) 22px;font-size:16px;color:var(--mute);line-height:1.5}\n.qcm .qa .ans a{color:var(--paper);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--volt)}\n.qcm .ind{border-top:1px solid var(--line)}\n.qcm .ind li a,.qcm .ind li>div{display:block;padding:20px var(--pad);border-bottom:1px solid var(--line)}\n.qcm .ind h3{font-size:26px;line-height:1.08;letter-spacing:-.025em;font-weight:600}\n.qcm .ind p{font-size:15px;color:var(--mute);margin-top:8px}\n.qcm .ind .ex{display:inline-flex;align-items:center;gap:8px;margin-top:12px;font-family:var(--mono);font-size:13px;color:var(--volt)}\n.qcm .ind .ex svg{width:16px;height:16px}\n.qcm .tech{border-top:1px solid var(--line)}\n.qcm .tech>li{padding:22px var(--pad);border-bottom:1px solid var(--line)}\n.qcm .tech h3{font-size:26px;line-height:1.08;letter-spacing:-.025em;font-weight:600}\n.qcm .tech p{font-size:15px;color:var(--mute);margin-top:8px}\n.qcm .stackl{padding:0 var(--pad)}\n.qcm .more{display:flex;align-items:center;justify-content:space-between;margin:14px var(--pad) 0;height:56px;padding:0 18px;border:1px solid var(--line);border-radius:12px;font-weight:500}\n.qcm .more svg{width:20px;height:20px;color:var(--volt)}\n.qcm .more.on-volt{margin:22px 0 0;border-color:rgba(10,14,23,.35);color:var(--ink)}\n.qcm .more.on-volt svg{color:var(--ink)}\n.qcm .cta{position:relative;padding:var(--sec) var(--pad) 48px}\n.qcm .cta h2,.qcm .cta h1{font-size:clamp(40px,12vw,48px);line-height:.94;letter-spacing:-.04em;font-weight:700;margin-top:12px;text-wrap:balance}\n.qcm .cta .sub{font-size:17px;color:var(--mute);margin-top:16px;max-width:340px}\n.qcm .needs-q{margin-top:24px}\n.qcm .needs{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}\n.qcm .needs a{display:inline-flex;align-items:center;min-height:42px;padding:0 15px;border:1px solid rgba(200,245,59,.45);border-radius:99px;font-size:15px;font-weight:500}\n.qcm .needs a:active{background:var(--volt);color:var(--ink)}\n.qcm .wa{display:flex;align-items:center;gap:14px;margin-top:22px;background:var(--volt);color:var(--ink);border-radius:18px;padding:18px}\n.qcm .wa .ic{flex:0 0 52px;height:52px;border-radius:14px;background:var(--ink);color:var(--volt);display:grid;place-items:center}\n.qcm .wa .ic svg{width:28px;height:28px}\n.qcm .wa b{display:block;font-size:20px;font-weight:700;letter-spacing:-.01em;line-height:1.1}\n.qcm .wa span span{display:block;font-size:15px;font-weight:500;margin-top:3px}\n.qcm .wa .arr{margin-left:auto;width:22px;height:22px;flex:0 0 22px}\n.qcm .alt{display:flex;justify-content:space-between;align-items:center;margin-top:12px;padding:16px 18px;border:1px solid var(--line);border-radius:14px}\n.qcm .alt b{font-weight:500}\n.qcm .alt>svg{width:22px;height:22px;color:var(--volt)}\n.qcm .langs{display:flex;gap:8px;margin-top:20px;flex-wrap:wrap}\n.qcm .langs span{font-size:14px;padding:7px 12px;border:1px solid var(--line);border-radius:99px}\n.qcm .form-head{padding:var(--sec) var(--pad) 28px}\n.qcm .form-head h2{font-size:38px;line-height:1;letter-spacing:-.03em;font-weight:700;margin-top:10px}\n.qcm .form-head p.intro{font-size:16px;color:var(--mute);margin-top:14px}\n.qcm .reach{margin-top:12px;border-top:1px solid var(--line)}\n.qcm .reach a{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 0;border-bottom:1px solid var(--line)}\n.qcm .reach b{display:block;font-size:20px;font-weight:600;letter-spacing:-.01em}\n.qcm .reach small{display:block;font-size:14px;color:var(--mute);margin-top:2px}\n.qcm .reach svg{width:22px;height:22px;color:var(--volt);flex:0 0 22px}\n.qcm .end{height:8px}\n@media (prefers-reduced-motion:no-preference){\n.qcm.js .rv{opacity:0;transform:translateY(22px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1)}\n.qcm.js .rv.in{opacity:1;transform:none}\n.qcm.js .scan>img{clip-path:inset(0 0 100% 0)}\n.qcm.js .scan.in>img{animation:qcmscan 1.05s cubic-bezier(.65,.05,.3,1) both}\n.qcm.js .scan::after{content:\"\";position:absolute;left:0;right:0;top:0;height:2px;background:var(--volt);box-shadow:0 0 14px 2px rgba(200,245,59,.55);transform:translateY(-100%);opacity:0;pointer-events:none;z-index:4}\n.qcm.js .scan.in::after{animation:qcmline 1.05s cubic-bezier(.65,.05,.3,1) both}\n.qcm.js .rv .scan.in>img,.qcm.js .rv .scan.in::after{animation-delay:.15s}\n.qcm.js .scan.done>img{animation:none;clip-path:none}\n.qcm.js .scan.done::after{animation:none;opacity:0}\n.qcm .hero h1{animation:qcmrise .8s cubic-bezier(.2,.7,.2,1) both}\n}\n.qcm .tag{color:var(--paper);font-size:20px;line-height:1.3;font-weight:500;letter-spacing:-.01em;max-width:340px}\n.qcm .summary{padding:28px var(--pad) 0;font-size:16px;color:var(--mute);line-height:1.5}\n.qcm .crop.narrow{width:62%}\n.qcm .places{display:block}\n.qcm .places .say{display:block;padding:0 var(--pad) 22px;margin-top:-12px;font-size:38px;line-height:1;letter-spacing:-.03em;font-weight:700}\n.qcm .places .pl{display:block;padding:14px var(--pad);border-bottom:1px solid var(--line);font-size:clamp(40px,12vw,48px);line-height:1;letter-spacing:-.04em;font-weight:700}\n.qcm .places .say+.pl{border-top:1px solid var(--line)}\n.qcm .places .pl:last-child{color:var(--volt)}\n.qcm .intro.pad{padding:20px var(--pad) 0;font-size:16px;color:var(--mute)}\n.qcm .side-shot{margin-top:18px}\n.qcm .volt .first{font-size:20px;line-height:1.3;font-weight:600;letter-spacing:-.01em;margin-top:18px}\n.qcm .volt h2.big{color:var(--ink)}\n.qcm .side-shot .crop{width:70%}\n@keyframes qcmscan{from{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0 0 0 0)}}\n@keyframes qcmline{0%{top:0;opacity:1}88%{opacity:1}100%{top:100%;opacity:0}}\n@keyframes qcmrise{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}\n<\/style>\n<div class=\"qcm\">\n<svg width=\"0\" height=\"0\" style=\"position:absolute\" aria-hidden=\"true\">\n<symbol id=\"qcm-arr\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M13 6l6 6-6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/symbol>\n<symbol id=\"qcm-up\" viewBox=\"0 0 24 24\"><path d=\"M7 17 17 7M8 7h9v9\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/symbol>\n<symbol id=\"qcm-wa\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12.04 2a9.9 9.9 0 0 0-8.5 15l-1.4 5 5.2-1.36A9.9 9.9 0 1 0 12.04 2Zm0 18.1a8.2 8.2 0 0 1-4.2-1.15l-.3-.18-3.08.8.82-3-.2-.31a8.2 8.2 0 1 1 6.96 3.84Zm4.5-6.14c-.25-.12-1.46-.72-1.69-.8-.23-.08-.39-.12-.55.12-.17.25-.64.8-.78.97-.14.16-.29.18-.53.06a6.7 6.7 0 0 1-3.37-2.94c-.25-.44.25-.41.72-1.36.08-.16.04-.3-.02-.43l-.76-1.83c-.2-.48-.4-.41-.55-.42h-.47a.9.9 0 0 0-.65.3 2.74 2.74 0 0 0-.85 2.04c0 1.2.87 2.37 1 2.53.12.16 1.72 2.63 4.17 3.69 1.55.67 2.16.73 2.93.61.47-.07 1.46-.6 1.66-1.17.2-.58.2-1.07.15-1.17-.07-.1-.23-.16-.47-.28Z\"\/><\/symbol>\n<symbol id=\"qcm-plus\" viewBox=\"0 0 24 24\"><path d=\"M12 5v14M5 12h14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/><\/symbol>\n<\/svg>\n<section class=\"hero\">\n  <p class=\"label\" data-l=\"\/\/ AI  \u00b7  05 \/ 06\"><\/p>\n  <h1>AI document assistant<\/h1>\n  <p class=\"lead tag\">An AI document assistant for your company files. Ask a question, then get the answer with its source.<\/p>\n  <div class=\"duo\"><div class=\"dk scan\"><img fetchpriority=\"high\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp\" srcset=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat-768x480.webp 768w, https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat-1024x640.webp 1024w, https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp 1440w\" sizes=\"80vw\" width=\"1440\" height=\"900\" fetchpriority=\"high\" decoding=\"async\" alt=\"Ask: every answer shows its sources, and the passage it used is highlighted on the page.\"><\/div><div class=\"ph scan\"><img src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-mobile-answer.webp\" width=\"390\" height=\"844\" decoding=\"async\" alt=\"Mobile answer: step-by-step instructions with the manual pages they came from.\"><\/div><span class=\"dtag\" aria-hidden=\"true\" data-tag=\"\/\/ ai-document-assistant\"><\/span><\/div>\n<\/section>\n<p class=\"summary\">An AI document assistant that answers staff questions from the company&#x27;s own policies, contracts and manuals. Every answer shows the file and page it came from. Each person also gets answers only from files they are allowed to open.<\/p>\n<dl class=\"dl\"><div><dt>Made for<\/dt><dd>Companies whose answers sit in policies, contracts and manuals.<\/dd><\/div><div><dt>Used by<\/dt><dd>Staff who ask questions, and admins who choose who can see what.<\/dd><\/div><div><dt>Runs on<\/dt><dd>The web, and a mobile app for staff away from their desk.<\/dd><\/div><\/dl>\n<section class=\"volt rv\"><p class=\"label\"><span aria-hidden=\"true\">\/\/ <\/span>The challenge<\/p><h2 class=\"big\">Why companies need an AI assistant<\/h2><p class=\"first\">In many companies, the answer to a question is already written down.<\/p><p>For example, it sits in one of hundreds of policies, contracts and manuals. People can&#x27;t find the right file or the right page, so they ask a colleague, use an old version or guess. The same questions reach HR, Finance and Legal again and again. A general chatbot doesn&#x27;t solve this, because it can&#x27;t see internal files. It also can&#x27;t show where an answer came from, and it doesn&#x27;t know who is allowed to see what.<\/p><\/section>\n<section>\n  <div class=\"sh\"><div class=\"sh-row\"><p class=\"label\"><span aria-hidden=\"true\">\/\/ <\/span>Features<\/p><span class=\"count\">07 parts<\/span><\/div><h2>What&#x27;s in the AI assistant<\/h2><p class=\"intro\">Seven parts that turn company files into answers people can check.<\/p><\/div>\n  <ol class=\"rows\"><li class=\"rv\"><span class=\"n\" aria-hidden=\"true\">01<\/span><div><h3>AI assistant answers with sources<\/h3><p>Every answer links to the file and page it came from. One click opens the page with the passage highlighted, so people can check it themselves.<\/p><div class=\"crop scan\" style=\"aspect-ratio:412\/412;--zw:349.515%;--zx:-246.602%;--zy:-79.612%\"><img loading=\"lazy\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" decoding=\"async\" alt=\"The source beside an answer: page 6 of the travel policy, with the hotel limit for Berlin highlighted in its table\"><\/div><\/div><\/li><li class=\"rv\"><span class=\"n\" aria-hidden=\"true\">02<\/span><div><h3>AI document library<\/h3><p>Upload files or connect a shared folder. Each file shows its status: ready, processing, or needs attention, for example a scanned page or a password-protected file.<\/p><div class=\"crop scan\" style=\"aspect-ratio:566\/290;--zw:254.417%;--zx:-49.823%;--zy:-117.931%\"><img loading=\"lazy\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-library.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" decoding=\"async\" alt=\"Files in the library with their status: one being processed, one queued, a scanned file that cannot be read and one locked by a password\"><\/div><\/div><\/li><li class=\"rv\"><span class=\"n\" aria-hidden=\"true\">03<\/span><div><h3>Access by team<\/h3><p>Admins choose which teams can ask about each collection. Then the assistant answers only from files the person asking is allowed to open.<\/p><div class=\"crop scan\" style=\"aspect-ratio:556\/410;--zw:258.993%;--zx:-50.719%;--zy:-41.951%\"><img loading=\"lazy\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-access.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" decoding=\"async\" alt=\"Which teams can ask about each collection: Ask or Manage for each team, and a dash where a team has no access\"><\/div><\/div><\/li><li class=\"rv\"><span class=\"n\" aria-hidden=\"true\">04<\/span><div><h3>Human check for important topics<\/h3><p>Answers about contracts, pay, spending limits or safety show a clear review note. People can send them to the owner team before they act.<\/p><\/div><\/li><li class=\"rv\"><span class=\"n\" aria-hidden=\"true\">05<\/span><div><h3>Questions dashboard<\/h3><p>Admins see what people ask and which answers went for review. Questions with no source are listed, so admins can add the missing file.<\/p><\/div><\/li><li class=\"rv\"><span class=\"n\" aria-hidden=\"true\">06<\/span><div><h3>Current versions only<\/h3><p>When a new version of a file is uploaded, answers stop using the old one. The old file still stays in the archive.<\/p><\/div><\/li><li class=\"rv\"><span class=\"n\" aria-hidden=\"true\">07<\/span><div><h3>Ask on the go<\/h3><p>A mobile app for staff away from their desk, with voice questions and the same sources and access rules.<\/p><\/div><\/li><\/ol>\n<\/section>\n<section>\n  <div class=\"sh\"><div class=\"sh-row\"><p class=\"label\"><span aria-hidden=\"true\">\/\/ <\/span>How it works<\/p><span class=\"count\">04 steps<\/span><\/div><h2>How the AI assistant works<\/h2><\/div>\n  <ol class=\"steps\"><li class=\"rv\"><div class=\"top\"><span class=\"n\">01<\/span><\/div><h3>Collect the files<\/h3><p>We connect the shared folders and upload the existing documents. Each file goes into a collection, such as HR Policies, Contracts or Product Manuals.<\/p><div class=\"wide\"><div class=\"dk scan\"><img loading=\"lazy\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-library.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" decoding=\"async\" alt=\"AI document assistant library: see which files are ready, still processing, or need attention.\"><\/div><\/div><\/li><li class=\"rv\"><div class=\"side\"><div><div class=\"top\"><span class=\"n\">02<\/span><\/div><h3>Prepare them for search<\/h3><p>The system reads the text, including tables, and splits each file into short passages linked to their page. Scanned or locked files are flagged so someone can fix them.<\/p><\/div><div class=\"crop scan\" style=\"aspect-ratio:360\/760;--zw:400.000%;--zx:-300.000%;--zy:-6.579%\"><img loading=\"lazy\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-library.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" decoding=\"async\" alt=\"File details while a contract is prepared for answers: uploaded, text read, split into passages, and set to replace the 2023 version\"><\/div><\/div><\/li><li class=\"rv\"><div class=\"top\"><span class=\"n\">03<\/span><\/div><h3>Set the rules<\/h3><p>Admins choose which teams can ask about each collection, and which topics always need a human check.<\/p><div class=\"wide\"><div class=\"dk scan\"><img loading=\"lazy\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-access.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" decoding=\"async\" alt=\"AI document assistant access and permissions: choose which teams can ask about each collection and which topics need a human check.\"><\/div><\/div><\/li><li class=\"rv\"><div class=\"side\"><div><div class=\"top\"><span class=\"n\">04<\/span><\/div><h3>Ask and check<\/h3><p>Staff ask in plain words on the web or on their phone. Each answer comes with its sources so they can check it. If the files don&#x27;t cover a question, the assistant says it found no source.<\/p><\/div><div class=\"ph scan\"><img loading=\"lazy\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-mobile-ask.webp\" width=\"390\" height=\"844\" loading=\"lazy\" decoding=\"async\" alt=\"AI document assistant on mobile: ask a quick question by typing or by voice.\"><\/div><\/div><\/li><\/ol>\n<\/section>\n<section>\n  <div class=\"sh\"><div class=\"sh-row\"><p class=\"label\"><span aria-hidden=\"true\">\/\/ <\/span>Built with<\/p><\/div><h2>The tools behind the AI assistant<\/h2><\/div>\n  <ul class=\"chips stackl\"><li>Next.js<\/li> <li>React<\/li> <li>Python (FastAPI)<\/li> <li>PostgreSQL with pgvector<\/li> <li>Redis<\/li> <li>OpenAI \/ Claude APIs<\/li> <li>Tesseract OCR<\/li> <li>Flutter<\/li> <li>AWS \/ DigitalOcean<\/li><\/ul>\n  <a class=\"more\" href=\"\/services\/#ai\">Part of our AI solutions <svg aria-hidden=\"true\"><use href=\"#qcm-arr\"\/><\/svg><\/a>\n  <a class=\"more\" href=\"\/how-we-work\/\">See how a project runs <svg aria-hidden=\"true\"><use href=\"#qcm-arr\"\/><\/svg><\/a>\n<\/section>\n<section>\n  <div class=\"sh\"><div class=\"sh-row\"><p class=\"label\"><span aria-hidden=\"true\">\/\/ <\/span>Next project<\/p><span class=\"count\">06 \/ 06<\/span><\/div><h2>Delivery app and dispatch board<\/h2><\/div>\n  <div class=\"tiles\"><a class=\"tile rv\" href=\"\/work\/delivery-app\/\" data-cat=\"apps\"><div class=\"pic scan\"><span class=\"num\">06 \/ Apps<\/span> <img loading=\"lazy\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-delivery-app-cover.webp\" srcset=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-delivery-app-cover-768x480.webp 768w, https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-delivery-app-cover-1024x640.webp 1024w, https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-delivery-app-cover-1536x960.webp 1536w, https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-delivery-app-cover.webp 1600w\" sizes=\"auto, 100vw\" width=\"1600\" height=\"1000\" loading=\"lazy\" decoding=\"async\" alt=\"Delivery app dispatch board screen\"><\/div> <div class=\"meta\"><div><h3 class=\"label\">Delivery app and dispatch board<\/h3> <p class=\"tt\">Driver app and live dispatch map for delivery teams.<\/p><\/div> <span class=\"go\"><svg aria-hidden=\"true\"><use href=\"#qcm-up\"\/><\/svg><\/span><\/div><\/a><\/div>\n  <a class=\"more\" href=\"\/work\/\">All projects <svg aria-hidden=\"true\"><use href=\"#qcm-arr\"\/><\/svg><\/a>\n<\/section>\n<section class=\"cta\">\n  <p class=\"label\"><span aria-hidden=\"true\">\/\/ <\/span>Contact<\/p>\n  <h2>Want one like this?<\/h2>\n  <p class=\"sub\">Tell us how your business works. Then we&#x27;ll suggest what fits, even if that&#x27;s a ready-made tool. No tech words needed.<\/p>\n  <p class=\"label dim needs-q\">What do you need?<\/p>\n  <ul class=\"needs\" aria-label=\"What do you need?\"><li><a href=\"https:\/\/wa.me\/966507600156?text=Hi%20Qcoders%2C%20I%20found%20you%20on%20your%20website.%20I%20need%20a%20website.\" target=\"_blank\" rel=\"noopener\">Website<\/a><\/li><li><a href=\"https:\/\/wa.me\/966507600156?text=Hi%20Qcoders%2C%20I%20found%20you%20on%20your%20website.%20I%20need%20an%20online%20store.\" target=\"_blank\" rel=\"noopener\">Online store<\/a><\/li><li><a href=\"https:\/\/wa.me\/966507600156?text=Hi%20Qcoders%2C%20I%20found%20you%20on%20your%20website.%20I%20need%20a%20mobile%20app.\" target=\"_blank\" rel=\"noopener\">App<\/a><\/li><li><a href=\"https:\/\/wa.me\/966507600156?text=Hi%20Qcoders%2C%20I%20found%20you%20on%20your%20website.%20I%20need%20a%20business%20system.\" target=\"_blank\" rel=\"noopener\">Business system<\/a><\/li><li><a href=\"https:\/\/wa.me\/966507600156?text=Hi%20Qcoders%2C%20I%20found%20you%20on%20your%20website.%20I%20need%20an%20AI%20assistant.\" target=\"_blank\" rel=\"noopener\">AI<\/a><\/li><li><a href=\"https:\/\/wa.me\/966507600156?text=Hi%20Qcoders%2C%20I%20found%20you%20on%20your%20website.%20I%20need%20help%20deciding.\" target=\"_blank\" rel=\"noopener\">Not sure yet<\/a><\/li><\/ul>\n  <a class=\"wa\" href=\"https:\/\/wa.me\/966507600156?text=Hi%20Qcoders%2C%20I%20found%20you%20on%20your%20website.%20I%20need%20an%20AI%20assistant.\" target=\"_blank\" rel=\"noopener\">\n    <span class=\"ic\"><svg aria-hidden=\"true\"><use href=\"#qcm-wa\"\/><\/svg><\/span>\n    <span><b>Chat on WhatsApp<\/b> <span>+966 50 760 0156<\/span><\/span>\n    <svg class=\"arr\" aria-hidden=\"true\"><use href=\"#qcm-arr\"\/><\/svg>\n  <\/a>\n  <a class=\"alt\" href=\"mailto:info@qcoders.com\"><span><span class=\"label dim\">\/\/ Email<\/span><br><b>info@qcoders.com<\/b><\/span><svg aria-hidden=\"true\"><use href=\"#qcm-arr\"\/><\/svg><\/a>\n  <div class=\"langs\"><span>English<\/span> <span lang=\"ar\" dir=\"rtl\">\u0627\u0644\u0639\u0631\u0628\u064a\u0629<\/span> <span lang=\"tr\">T\u00fcrk\u00e7e<\/span><\/div>\n<\/section>\n<\/div>\n<script>(function(){document.querySelectorAll('.qcm:not([data-qcm])').forEach(function(r){r.setAttribute('data-qcm','1');r.classList.add('js');\nvar els=r.querySelectorAll('.rv,.scan');\nif(!('IntersectionObserver' in window)){els.forEach(function(e){e.classList.add('in')});}else{\nvar io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){var t=e.target;t.classList.add('in');io.unobserve(t);if(t.classList.contains('scan'))setTimeout(function(){t.classList.add('done')},1400);}})},{rootMargin:'0px 0px -10% 0px',threshold:0.12});\nels.forEach(function(e){io.observe(e)});}\nvar f=r.querySelector('.flt');if(f){var bs=f.querySelectorAll('button'),ts=r.querySelectorAll('.tiles .tile'),c=r.querySelector('[data-count]');\nbs.forEach(function(b){b.addEventListener('click',function(){var k=b.getAttribute('data-f'),n=0;bs.forEach(function(x){x.setAttribute('aria-pressed',x===b?'true':'false')});\nts.forEach(function(t){var on=k==='all'||t.getAttribute('data-cat')===k;t.hidden=!on;if(on){n++;t.classList.add('in');t.querySelectorAll('.scan').forEach(function(s){s.classList.add('in','done')});}});\nif(c)c.textContent=(n<10?'0':'')+n+(n===1?' project':' projects');});});}\n});})();<\/script><script>(function(){if(window.__qcmHash)return;window.__qcmHash=1;function go(){var h=decodeURIComponent(location.hash.slice(1));if(!h)return;\nvar t=document.getElementById(h);if(t&&t.getClientRects().length)return;var m=document.getElementById('m-'+h);if(!m||!m.getClientRects().length)return;\nif(m.tagName==='DETAILS')m.open=true;m.scrollIntoView();}window.addEventListener('hashchange',go);\nif(document.readyState==='complete')go();else window.addEventListener('load',go);})();<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1198d6d4 e-con-full elementor-hidden-mobile e-flex e-con e-parent\" data-id=\"1198d6d4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-45eea57d elementor-widget elementor-widget-html\" data-id=\"45eea57d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<style>\n\/* Body text on the CRM blue: Paper on #2F54E0 is 5.6:1, the lowest of the product fields, so running text\n   there is set at 400 instead of the 300 that v2.css gives light text on dark grounds. (Page-scoped\n   copy of a fix that belongs in v2.css section 2, on .qc2--f-crm.) *\/\n.qc2.qc2--f-crm, .qc2 .qc2--f-crm { --qc2-w-body: 400; }\n\/* 01 Screen on stage, as the case opener (.qc2-stage--open). The h1 (with its code label, the two in\n   .qc2-stage__head) and the tagline take the first row at opposite ends (margin and the 50% line); the\n   facts sit under the h1, the product's screens stand on the section's foot beside them. On a phone the\n   screens come straight after the tagline. *\/\n.qc2.qc2-stage--open { padding-top: var(--qc2-s9); }\n.qc2.qc2-stage--open .qc2-stage__lead { max-width: 30ch; }\n.qc2.qc2-stage--open .qc2-stage__text > * + * { margin-top: var(--qc2-s5); }\n.qc2.qc2-stage--open .qc2-facts dt { font-weight: 500; }\n@container qc2 (max-width: 63.99rem) {\n  .qc2.qc2-stage--open .qc2-stage__lead { margin-top: var(--qc2-s5); padding-bottom: var(--qc2-s7); }\n  .qc2.qc2-stage--open .qc2-stage__text { padding-bottom: var(--qc2-sec); }\n}\n@container qc2 (min-width: 64rem) {\n  .qc2.qc2-stage--open .qc2-grid { row-gap: var(--qc2-s7); }\n  .qc2.qc2-stage--open .qc2-stage__head { grid-column: 1 \/ span 6; grid-row: 1; align-self: end; }\n  .qc2.qc2-stage--open .qc2-stage__lead { grid-column: 7 \/ -1; grid-row: 1; align-self: end; }\n  .qc2.qc2-stage--open .qc2-stage__text { grid-row: 2; padding-bottom: var(--qc2-s8); }\n  .qc2.qc2-stage--open :is(.qc2-stage__screen, .qc2-stage__phone) { grid-row: 2; }\n  .qc2.qc2-stage--open .qc2-stage__phone { max-width: 13.5rem; margin-left: var(--qc2-s6); }\n}\n<\/style>\n\n<div class=\"qc2 qc2--f-docs qc2-stage qc2-stage--open\">\n  <div class=\"qc2-wrap qc2-grid\">\n    <div class=\"qc2-head qc2-stage__head\">\n      <p class=\"qc2-label\"><span aria-hidden=\"true\">\/\/ <\/span>AI<\/p>\n      <div class=\"qc2-display\" role=\"heading\" aria-level=\"1\">AI document assistant<\/div>\n    <\/div>\n    <p class=\"qc2-lead qc2-stage__lead\">An AI document assistant for your company files. Ask a question, then get the answer with its source.<\/p>\n    <figure class=\"qc2-pic qc2-screen qc2-stage__screen\">\n      <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp\" width=\"1440\" height=\"900\" fetchpriority=\"high\" alt=\"Ask: every answer shows its sources, and the passage it used is highlighted on the page.\">\n    <\/figure>\n    <figure class=\"qc2-pic qc2-phone qc2-stage__phone\">\n      <img decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-mobile-answer.webp\" width=\"390\" height=\"844\" alt=\"Mobile answer: step-by-step instructions with the manual pages they came from.\">\n    <\/figure>\n    <div class=\"qc2-stage__text\">\n      <p>An AI document assistant that answers staff questions from the company&#x27;s own policies, contracts and manuals. Every answer shows the file and page it came from. Each person also gets answers only from files they are allowed to open.<\/p>\n      <dl class=\"qc2-facts\">\n        <div><dt>Made for<\/dt><dd>Companies whose answers sit in policies, contracts and manuals.<\/dd><\/div>\n        <div><dt>Used by<\/dt><dd>Staff who ask questions, and admins who choose who can see what.<\/dd><\/div>\n        <div><dt>Runs on<\/dt><dd>The web, and a mobile app for staff away from their desk.<\/dd><\/div>\n      <\/dl>\n    <\/div>\n  <\/div>\n<\/div>\n<style data-qc2-guard>\n\/* make_v2.py: the margin rules above, one id stronger than Elementor's figure reset (kit-v2.css 2) *\/\n.qc2.qc2-stage--open .qc2-stage__text > * + *:not(#qc2-guard) { margin-top: var(--qc2-s5); }\n@container qc2 (max-width: 63.99rem) { .qc2.qc2-stage--open .qc2-stage__lead:not(#qc2-guard) { margin-top: var(--qc2-s5); } }\n@container qc2 (min-width: 64rem) { .qc2.qc2-stage--open .qc2-stage__phone:not(#qc2-guard) { margin-left: var(--qc2-s6); } }\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-429d507e e-con-full elementor-hidden-mobile e-flex e-con e-parent\" data-id=\"429d507e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-59c4fb87 elementor-widget elementor-widget-html\" data-id=\"59c4fb87\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>@media(max-width:1024px){.qcui-d{display:none!important}}@media(min-width:1025px){.qcui-t{display:none!important}}<\/style>\n<div class=\"qc2 qc2--paper qc2-two qc2-two--flip\">\n  <div class=\"qc2-two__split\">\n    <div class=\"qc2-two__a qc2-stack\">\n      <p class=\"qc2-label\"><span aria-hidden=\"true\">\/\/ <\/span>The challenge<\/p>\n      <h2 class=\"qc2-h\">Why companies need an AI assistant<\/h2>\n      <p class=\"qc2-lead\">In many companies, the answer to a question is already written down.<\/p>\n      <p>For example, it sits in one of hundreds of policies, contracts and manuals. People can&#x27;t find the right file or the right page, so they ask a colleague, use an old version or guess. The same questions reach HR, Finance and Legal again and again. A general chatbot doesn&#x27;t solve this, because it can&#x27;t see internal files. It also can&#x27;t show where an answer came from, and it doesn&#x27;t know who is allowed to see what.<\/p>\n    <\/div>\n    <div class=\"qc2-two__b\">\n      <figure class=\"qc2-pic qc2-cut\" style=\"--qc2-focus: 58% 40%; --qc2-focus-m: 60% 40%\">\n      \n      <img loading=\"lazy\" decoding=\"async\" class=\"qcui-t\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-ui-accountant-binders-laptop-r210.webp\" width=\"2400\" height=\"1143\" loading=\"lazy\" alt=\"The AI document assistant answering a question on a laptop and a phone\"><img loading=\"lazy\" decoding=\"async\" class=\"qcui-d\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-ui-accountant-binders-laptop-r80.webp\" width=\"1300\" height=\"1625\" loading=\"lazy\" alt=\"The AI document assistant answering a question on a laptop and a phone\">\n      <\/figure>\n    <\/div>\n  <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-186f136f e-con-full elementor-hidden-mobile e-flex e-con e-parent\" data-id=\"186f136f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4830476f elementor-widget elementor-widget-html\" data-id=\"4830476f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<style>\n\/* 03 Spec sheet for a product's features: eight rows, so a tighter rhythm than the default 96px; five\n   rows carry a tight crop of the screen they describe; the last row lists the stack in two columns.\n   The paragraphs are the content here, so they are set in full Ink, not the muted grey of v2.css. *\/\n.qc2 .qc2-pic.qc2-zoom { background: var(--qc2-paper); }\n.qc2.qc2-case-rows .qc2-rows__row p { color: var(--qc2-fg); }\n.qc2 .qc2-pic.qc2-zoom > img {\n  position: absolute; left: var(--zx); top: var(--zy); width: var(--zw); max-width: none; height: auto; object-fit: fill;\n}\n.qc2.qc2-case-rows .qc2-built-with { columns: 2 14rem; column-gap: var(--qc2-gutter); }\n.qc2.qc2-case-rows .qc2-built-with li { break-inside: avoid; padding-block: 0.2em; }\n@container qc2 (min-width: 64rem) {\n  .qc2.qc2-case-rows .qc2-rows__list { gap: var(--qc2-s8); }\n  .qc2.qc2-case-rows .qc2-rows__row:has(> .qc2-rows__crop) { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }\n}\n<\/style>\n<div class=\"qc2 qc2--stone qc2-rows qc2-rows--hold qc2-case-rows qc2-sec\">\n  <div class=\"qc2-wrap qc2-grid\">\n    <div class=\"qc2-rows__head qc2-stack\">\n      <p class=\"qc2-label\"><span aria-hidden=\"true\">\/\/ <\/span>Features<\/p>\n      <h2 class=\"qc2-h\">What&#x27;s in the AI assistant<\/h2>\n      <p>Seven parts that turn company files into answers people can check.<\/p>\n    <\/div>\n    <ul class=\"qc2-rows__list\">\n      <li class=\"qc2-rows__row\">\n        <h3 class=\"qc2-title\">AI assistant answers with sources<\/h3>\n        <p>Every answer links to the file and page it came from. One click opens the page with the passage highlighted, so people can check it themselves.<\/p>\n        <figure class=\"qc2-rows__crop qc2-cut\">\n          <div class=\"qc2-pic qc2-zoom\" style=\"aspect-ratio: 412 \/ 412; --zw: 349.515%; --zx: -246.602%; --zy: -79.612%\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" alt=\"The source beside an answer: page 6 of the travel policy, with the hotel limit for Berlin highlighted in its table\"><\/div>\n        <\/figure>\n      <\/li>\n      <li class=\"qc2-rows__row\">\n        <h3 class=\"qc2-title\">AI document library<\/h3>\n        <p>Upload files or connect a shared folder. Each file shows its status: ready, processing, or needs attention, for example a scanned page or a password-protected file.<\/p>\n        <figure class=\"qc2-rows__crop qc2-cut\">\n          <div class=\"qc2-pic qc2-zoom\" style=\"aspect-ratio: 566 \/ 290; --zw: 254.417%; --zx: -49.823%; --zy: -117.931%\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-library.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" alt=\"Files in the library with their status: one being processed, one queued, a scanned file that cannot be read and one locked by a password\"><\/div>\n        <\/figure>\n      <\/li>\n      <li class=\"qc2-rows__row\">\n        <h3 class=\"qc2-title\">Access by team<\/h3>\n        <p>Admins choose which teams can ask about each collection. Then the assistant answers only from files the person asking is allowed to open.<\/p>\n        <figure class=\"qc2-rows__crop qc2-cut\">\n          <div class=\"qc2-pic qc2-zoom\" style=\"aspect-ratio: 556 \/ 410; --zw: 258.993%; --zx: -50.719%; --zy: -41.951%\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-access.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" alt=\"Which teams can ask about each collection: Ask or Manage for each team, and a dash where a team has no access\"><\/div>\n        <\/figure>\n      <\/li>\n      <li class=\"qc2-rows__row\">\n        <h3 class=\"qc2-title\">Human check for important topics<\/h3>\n        <p>Answers about contracts, pay, spending limits or safety show a clear review note. People can send them to the owner team before they act.<\/p>\n      <\/li>\n      <li class=\"qc2-rows__row\">\n        <h3 class=\"qc2-title\">Questions dashboard<\/h3>\n        <p>Admins see what people ask and which answers went for review. Questions with no source are listed, so admins can add the missing file.<\/p>\n      <\/li>\n      <li class=\"qc2-rows__row\">\n        <h3 class=\"qc2-title\">Current versions only<\/h3>\n        <p>When a new version of a file is uploaded, answers stop using the old one. The old file still stays in the archive.<\/p>\n      <\/li>\n      <li class=\"qc2-rows__row\">\n        <h3 class=\"qc2-title\">Ask on the go<\/h3>\n        <p>A mobile app for staff away from their desk, with voice questions and the same sources and access rules.<\/p>\n      <\/li>\n      <li class=\"qc2-rows__row\">\n        <h3 class=\"qc2-title\">The tools behind the AI assistant<\/h3>\n        <ul class=\"qc2-built-with\">\n          <li>Next.js<\/li>\n          <li>React<\/li>\n          <li>Python (FastAPI)<\/li>\n          <li>PostgreSQL with pgvector<\/li>\n          <li>Redis<\/li>\n          <li>OpenAI \/ Claude APIs<\/li>\n          <li>Tesseract OCR<\/li>\n          <li>Flutter<\/li>\n          <li>AWS \/ DigitalOcean<\/li>\n        <\/ul>\n        <div class=\"qc2-actions\"><a class=\"qc2-link\" href=\"\/services\/#ai\">Part of our AI solutions<\/a> <a class=\"qc2-link\" href=\"\/how-we-work\/\">See how a project runs<\/a><\/div>\n      <\/li>\n    <\/ul>\n  <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2147d4d2 e-con-full elementor-hidden-mobile e-flex e-con e-parent\" data-id=\"2147d4d2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4b32498c elementor-widget elementor-widget-html\" data-id=\"4b32498c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<style>\n\/* 04 Process rail of a case, on Paper: the screens gallery. The held side carries the heading and a plate\n   of the product's own colour, bleeding off the left edge, on which each step's screen stands whole:\n   desktop screens across the plate (a long one is cropped from its top-left), phone screens and tall\n   crops at the plate's height. Each step carries the screen's caption from case.json. On a phone every\n   step shows its screen on its own plate, edge to edge, the caption on the plate under it. *\/\n.qc2.qc2-case-rail .qc2-rail__cap { margin-top: var(--qc2-s4); max-width: 46ch; }\n@container qc2 (max-width: 63.99rem) {\n  .qc2.qc2-case-rail .qc2-rail__cap { display: none; }\n  .qc2.qc2-case-rail .qc2-rail__step > .qc2-rail__inline {\n    display: grid; justify-items: center; gap: var(--qc2-s4);\n    margin: 0 calc(-1 * var(--qc2-margin)) var(--qc2-s6); padding: var(--qc2-s6) var(--qc2-margin) var(--qc2-s5);\n  }\n  .qc2.qc2-case-rail .qc2-rail__inline > .qc2-pic { width: 100%; }\n  .qc2.qc2-case-rail .qc2-rail__inline > :is(.qc2-phone, .qc2-tall) { width: min(64%, 18rem); }\n  .qc2.qc2-case-rail .qc2-rail__inline > .qc2-cap { justify-self: start; margin: 0; color: var(--qc2-fg); }\n}\n@container qc2 (min-width: 64rem) {\n  .qc2.qc2-case-rail .qc2-rail__steps { padding-block: 12svh 20svh; }\n  .qc2.qc2-case-rail .qc2-rail__step { min-height: 42svh; }\n  .qc2.qc2-case-rail .qc2-rail__frame { flex: 1 1 auto; aspect-ratio: auto; min-height: 22rem; }\n  .qc2.qc2-case-rail .qc2-rail__frame > .qc2-screen {\n    inset: 50% var(--qc2-s7) auto 0; height: auto; max-height: calc(100% - 2 * var(--qc2-s7));\n    aspect-ratio: 16 \/ 10; translate: 0 -50%;\n  }\n  .qc2.qc2-case-rail .qc2-rail__frame > :is(.qc2-phone, .qc2-tall) {\n    inset: var(--qc2-s7) auto auto 50%; width: auto; height: calc(100% - 2 * var(--qc2-s7)); translate: -50% 0;\n  }\n  .qc2.qc2-case-rail .qc2-rail__frame > .qc2-phone { aspect-ratio: 390 \/ 844; }\n}\n@container qc2 (min-width: 90rem) {   \/* wide screens: a seven-column plate, the steps on the last four *\/\n  .qc2.qc2-case-rail .qc2-rail__hold { grid-column: 1 \/ span 7; }\n  .qc2.qc2-case-rail .qc2-rail__steps { grid-column: 9 \/ -1; }\n}\n<\/style>\n<div class=\"qc2 qc2--paper qc2-rail qc2-rail--screens qc2-case-rail qc2-sec\">\n  <div class=\"qc2-wrap qc2-grid\">\n    <div class=\"qc2-rail__hold\">\n      <div class=\"qc2-head\">\n        <p class=\"qc2-label\"><span aria-hidden=\"true\">\/\/ <\/span>How it works<\/p>\n        <h2 class=\"qc2-h\">How the AI assistant works<\/h2>\n      <\/div>\n      <div class=\"qc2-rail__frame qc2--f-docs\">\n        <figure class=\"qc2-pic qc2-screen is-on\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-library.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" alt=\"AI document assistant library: see which files are ready, still processing, or need attention.\"><\/figure>\n        <figure class=\"qc2-pic qc2-zoom qc2-tall\" style=\"aspect-ratio: 360 \/ 760; --zw: 400.000%; --zx: -300.000%; --zy: -6.579%\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-library.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" alt=\"File details while a contract is prepared for answers: uploaded, text read, split into passages, and set to replace the 2023 version\"><\/figure>\n        <figure class=\"qc2-pic qc2-screen\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-access.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" alt=\"AI document assistant access and permissions: choose which teams can ask about each collection and which topics need a human check.\"><\/figure>\n        <figure class=\"qc2-pic qc2-phone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-mobile-ask.webp\" width=\"390\" height=\"844\" loading=\"lazy\" alt=\"AI document assistant on mobile: ask a quick question by typing or by voice.\"><\/figure>\n      <\/div>\n    <\/div>\n    <ol class=\"qc2-rail__steps\">\n      <li class=\"qc2-rail__step\">\n        <figure class=\"qc2-rail__inline qc2--f-docs\">\n          <div class=\"qc2-pic qc2-screen\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-library.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" alt=\"AI document assistant library: see which files are ready, still processing, or need attention.\"><\/div>\n          <figcaption class=\"qc2-cap\">AI document assistant library: see which files are ready, still processing, or need attention.<\/figcaption>\n        <\/figure>\n        <h3 class=\"qc2-title\">Collect the files<\/h3>\n        <p>We connect the shared folders and upload the existing documents. Each file goes into a collection, such as HR Policies, Contracts or Product Manuals.<\/p>\n        <p class=\"qc2-small qc2-muted qc2-rail__cap\">AI document assistant library: see which files are ready, still processing, or need attention.<\/p>\n      <\/li>\n      <li class=\"qc2-rail__step\">\n        <figure class=\"qc2-rail__inline qc2--f-docs\">\n          <div class=\"qc2-pic qc2-zoom qc2-tall\" style=\"aspect-ratio: 360 \/ 760; --zw: 400.000%; --zx: -300.000%; --zy: -6.579%\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-library.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" alt=\"File details while a contract is prepared for answers: uploaded, text read, split into passages, and set to replace the 2023 version\"><\/div>\n          <figcaption class=\"qc2-cap\">AI document assistant library: see which files are ready, still processing, or need attention.<\/figcaption>\n        <\/figure>\n        <h3 class=\"qc2-title\">Prepare them for search<\/h3>\n        <p>The system reads the text, including tables, and splits each file into short passages linked to their page. Scanned or locked files are flagged so someone can fix them.<\/p>\n        <p class=\"qc2-small qc2-muted qc2-rail__cap\">AI document assistant library: see which files are ready, still processing, or need attention.<\/p>\n      <\/li>\n      <li class=\"qc2-rail__step\">\n        <figure class=\"qc2-rail__inline qc2--f-docs\">\n          <div class=\"qc2-pic qc2-screen\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-access.webp\" width=\"1440\" height=\"900\" loading=\"lazy\" alt=\"AI document assistant access and permissions: choose which teams can ask about each collection and which topics need a human check.\"><\/div>\n          <figcaption class=\"qc2-cap\">AI document assistant access and permissions: choose which teams can ask about each collection and which topics need a human check.<\/figcaption>\n        <\/figure>\n        <h3 class=\"qc2-title\">Set the rules<\/h3>\n        <p>Admins choose which teams can ask about each collection, and which topics always need a human check.<\/p>\n        <p class=\"qc2-small qc2-muted qc2-rail__cap\">AI document assistant access and permissions: choose which teams can ask about each collection and which topics need a human check.<\/p>\n      <\/li>\n      <li class=\"qc2-rail__step\">\n        <figure class=\"qc2-rail__inline qc2--f-docs\">\n          <div class=\"qc2-pic qc2-phone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-mobile-ask.webp\" width=\"390\" height=\"844\" loading=\"lazy\" alt=\"AI document assistant on mobile: ask a quick question by typing or by voice.\"><\/div>\n          <figcaption class=\"qc2-cap\">AI document assistant on mobile: ask a quick question by typing or by voice.<\/figcaption>\n        <\/figure>\n        <h3 class=\"qc2-title\">Ask and check<\/h3>\n        <p>Staff ask in plain words on the web or on their phone. Each answer comes with its sources so they can check it. If the files don&#x27;t cover a question, the assistant says it found no source.<\/p>\n        <p class=\"qc2-small qc2-muted qc2-rail__cap\">AI document assistant on mobile: ask a quick question by typing or by voice.<\/p>\n      <\/li>\n    <\/ol>\n  <\/div>\n<\/div>\n<style data-qc2-guard>\n\/* make_v2.py: the margin rules above, one id stronger than Elementor's figure reset (kit-v2.css 2) *\/\n.qc2.qc2-case-rail .qc2-rail__cap:not(#qc2-guard) { margin-top: var(--qc2-s4); }\n@container qc2 (max-width: 63.99rem) { .qc2.qc2-case-rail .qc2-rail__step > .qc2-rail__inline:not(#qc2-guard) { margin: 0 calc(-1 * var(--qc2-margin)) var(--qc2-s6); } }\n@container qc2 (max-width: 63.99rem) { .qc2.qc2-case-rail .qc2-rail__inline > .qc2-cap:not(#qc2-guard) { margin: 0; } }\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3371e4c2 e-con-full elementor-hidden-mobile e-flex e-con e-parent\" data-id=\"3371e4c2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7676b008 elementor-widget elementor-widget-html\" data-id=\"7676b008\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<style>\n\/* 05 Full-bleed band as the link to the next project: the whole band is one link. *\/\n.qc2.qc2-band.qc2-band--next { --qc2-focus: var(--qc2-volt); }\n.qc2.qc2-band--next .qc2-band__link { display: block; color: inherit; text-decoration: none; }\n.qc2.qc2-band--next .qc2-band__link:focus-visible { outline-offset: -6px; }\n.qc2.qc2-band--next .qc2-band__go {\n  display: inline-block; color: var(--qc2-volt);\n  text-decoration: underline; text-decoration-thickness: 0.07em; text-underline-offset: 0.2em;\n  transition: text-decoration-thickness var(--qc2-t-hover) ease;\n}\n@media (hover: hover) and (pointer: fine) {\n  .qc2.qc2-band--next .qc2-band__link:hover .qc2-band__go { text-decoration-thickness: 0.14em; }\n}\n<\/style>\n<div class=\"qc2 qc2-band qc2-band--next\">\n  <a class=\"qc2-band__link\" href=\"\/work\/delivery-app\/\">\n    <figure class=\"qc2-pic qc2-band__pic qc2-cut\" style=\"--qc2-focus: 62% 40%; --qc2-focus-m: 64% 35%\">\n      \n      <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-ui-distribution-office-tablet-r155.webp\" width=\"2400\" height=\"1548\" loading=\"lazy\" alt=\"The delivery dispatcher dashboard on a laptop and an order's details on a phone\">\n    <\/figure>\n    <div class=\"qc2-band__plate\">\n      <p class=\"qc2-label\"><span aria-hidden=\"true\">\/\/ <\/span>Next project<\/p>\n      <h2 class=\"qc2-h\">Delivery driver app<\/h2>\n      <p>A delivery driver app for delivery teams, together with a live dispatch map.<\/p>\n      <span class=\"qc2-band__go\">See the next project<\/span>\n    <\/div>\n  <\/a>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-317852c6 e-con-full elementor-hidden-mobile e-flex e-con e-parent\" data-id=\"317852c6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-582b8989 elementor-widget elementor-widget-html\" data-id=\"582b8989\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<div class=\"qc2 qc2--ink qc2-line\">\n  <div class=\"qc2-wrap qc2-grid\">\n    <div class=\"qc2-line__text qc2-stack\">\n      <p class=\"qc2-label\"><span aria-hidden=\"true\">\/\/ <\/span>Contact<\/p>\n      <h2 class=\"qc2-h\">Want one like this?<\/h2>\n      <p class=\"qc2-lead qc2-muted\">Pick what you need, then we'll write the first message for you. No tech words needed.<\/p>\n      <fieldset class=\"qc2-pick\">\n        <legend>What do you need?<\/legend>\n        <div class=\"qc2-pick__opts\">\n          <label><input type=\"radio\" name=\"need\" value=\"a website\"><span>Website<\/span><\/label>\n          <label><input type=\"radio\" name=\"need\" value=\"an online store\"><span>Online store<\/span><\/label>\n          <label><input type=\"radio\" name=\"need\" value=\"a mobile app\"><span>App<\/span><\/label>\n          <label><input type=\"radio\" name=\"need\" value=\"a business system\"><span>Business system<\/span><\/label>\n          <label><input type=\"radio\" name=\"need\" value=\"an AI assistant\" checked><span>AI<\/span><\/label>\n          <label><input type=\"radio\" name=\"need\" value=\"help deciding\"><span>Not sure yet<\/span><\/label>\n        <\/div>\n      <\/fieldset>\n      <div class=\"qc2-actions\">\n        <a class=\"qc2-btn\" data-qc2-wa href=\"https:\/\/wa.me\/966507600156?text=Hi%20Qcoders%2C%20I%20found%20you%20on%20your%20website.%20I%20need%20an%20AI%20assistant.\">Message us on WhatsApp<\/a>\n        <a class=\"qc2-link\" href=\"mailto:info@qcoders.com\">info@qcoders.com<\/a>\n      <\/div>\n    <\/div>\n    <figure class=\"qc2-pic qc2-line__pic qc2-cut\">\n      \n      <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-ui-phone-held-close.webp\" width=\"1000\" height=\"1250\" loading=\"lazy\" alt=\"A phone showing a WhatsApp message to Qcoders\">\n      <div class=\"qc2-line__screen\" data-ui aria-hidden=\"true\">\n        <div class=\"qc2-line__bar\">\n          <svg viewBox=\"7 16 115 97\"><g fill=\"none\" stroke-width=\"12\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M51 28 L19 60 L51 92\" stroke=\"#0A0E17\"\/><path d=\"M69 28 L101 60 L69 92\" stroke=\"#0A0E17\"\/><path d=\"M97 88 L110 101\" stroke=\"#6E9400\"\/><\/g><\/svg>\n          Qcoders\n        <\/div>\n        <div class=\"qc2-line__msgs\">\n          <p class=\"qc2-line__bubble\" data-qc2-wa-text>Hi Qcoders, I found you on your website. I need an AI assistant.<\/p>\n        <\/div>\n        <div class=\"qc2-line__compose\">Message<\/div>\n      <\/div>\n    <\/figure>\n  <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>AI document assistant An AI document assistant for your company files. Ask a question, then get the answer with its source. An AI document assistant that answers staff questions from the company&#x27;s own policies, contracts and manuals. Every answer shows the file and page it came from. Each person also gets answers only from files [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-149","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>AI document assistant for company files | Qcoders<\/title>\n<meta name=\"description\" content=\"An AI document assistant that answers staff questions from company policies, contracts and manuals, and shows the file and page it used.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/qcoders.com\/ar\/work\/ai-document-assistant\/\" \/>\n<meta property=\"og:locale\" content=\"ar_AR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AI document assistant for company files | Qcoders\" \/>\n<meta property=\"og:description\" content=\"An AI document assistant that answers staff questions from company policies, contracts and manuals, and shows the file and page it used.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/qcoders.com\/ar\/work\/ai-document-assistant\/\" \/>\n<meta property=\"og:site_name\" content=\"Qcoders\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-02T07:00:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"12 \u062f\u0642\u064a\u0642\u0629\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/qcoders.com\\\/work\\\/ai-document-assistant\\\/\",\"url\":\"https:\\\/\\\/qcoders.com\\\/work\\\/ai-document-assistant\\\/\",\"name\":\"AI document assistant for company files | Qcoders\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/qcoders.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/qcoders.com\\\/work\\\/ai-document-assistant\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/qcoders.com\\\/work\\\/ai-document-assistant\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/qcoders.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/qc-work-ai-document-assistant-chat.webp\",\"datePublished\":\"2026-10-25T16:05:29+00:00\",\"dateModified\":\"2026-11-02T07:00:48+00:00\",\"description\":\"An AI document assistant that answers staff questions from company policies, contracts and manuals, and shows the file and page it used.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/qcoders.com\\\/work\\\/ai-document-assistant\\\/#breadcrumb\"},\"inLanguage\":\"ar\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/qcoders.com\\\/work\\\/ai-document-assistant\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ar\",\"@id\":\"https:\\\/\\\/qcoders.com\\\/work\\\/ai-document-assistant\\\/#primaryimage\",\"url\":\"https:\\\/\\\/qcoders.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/qc-work-ai-document-assistant-chat.webp\",\"contentUrl\":\"https:\\\/\\\/qcoders.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/qc-work-ai-document-assistant-chat.webp\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/qcoders.com\\\/work\\\/ai-document-assistant\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/qcoders.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Work\",\"item\":\"https:\\\/\\\/qcoders.com\\\/work\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"AI Document Assistant\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/qcoders.com\\\/#website\",\"url\":\"https:\\\/\\\/qcoders.com\\\/\",\"name\":\"Qcoders\",\"description\":\"Code that runs your business.\",\"publisher\":{\"@id\":\"https:\\\/\\\/qcoders.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/qcoders.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ar\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/qcoders.com\\\/#organization\",\"name\":\"Qcoders\",\"url\":\"https:\\\/\\\/qcoders.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ar\",\"@id\":\"https:\\\/\\\/qcoders.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/qcoders.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/qcoders-logo-qcoders-2026.png\",\"contentUrl\":\"https:\\\/\\\/qcoders.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/qcoders-logo-qcoders-2026.png\",\"width\":2000,\"height\":398,\"caption\":\"Qcoders\"},\"image\":{\"@id\":\"https:\\\/\\\/qcoders.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AI document assistant for company files | Qcoders","description":"An AI document assistant that answers staff questions from company policies, contracts and manuals, and shows the file and page it used.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/qcoders.com\/ar\/work\/ai-document-assistant\/","og_locale":"ar_AR","og_type":"article","og_title":"AI document assistant for company files | Qcoders","og_description":"An AI document assistant that answers staff questions from company policies, contracts and manuals, and shows the file and page it used.","og_url":"https:\/\/qcoders.com\/ar\/work\/ai-document-assistant\/","og_site_name":"Qcoders","article_modified_time":"2026-11-02T07:00:48+00:00","og_image":[{"url":"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"12 \u062f\u0642\u064a\u0642\u0629"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/qcoders.com\/work\/ai-document-assistant\/","url":"https:\/\/qcoders.com\/work\/ai-document-assistant\/","name":"AI document assistant for company files | Qcoders","isPartOf":{"@id":"https:\/\/qcoders.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/qcoders.com\/work\/ai-document-assistant\/#primaryimage"},"image":{"@id":"https:\/\/qcoders.com\/work\/ai-document-assistant\/#primaryimage"},"thumbnailUrl":"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp","datePublished":"2026-10-25T16:05:29+00:00","dateModified":"2026-11-02T07:00:48+00:00","description":"An AI document assistant that answers staff questions from company policies, contracts and manuals, and shows the file and page it used.","breadcrumb":{"@id":"https:\/\/qcoders.com\/work\/ai-document-assistant\/#breadcrumb"},"inLanguage":"ar","potentialAction":[{"@type":"ReadAction","target":["https:\/\/qcoders.com\/work\/ai-document-assistant\/"]}]},{"@type":"ImageObject","inLanguage":"ar","@id":"https:\/\/qcoders.com\/work\/ai-document-assistant\/#primaryimage","url":"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp","contentUrl":"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qc-work-ai-document-assistant-chat.webp"},{"@type":"BreadcrumbList","@id":"https:\/\/qcoders.com\/work\/ai-document-assistant\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/qcoders.com\/"},{"@type":"ListItem","position":2,"name":"Work","item":"https:\/\/qcoders.com\/work\/"},{"@type":"ListItem","position":3,"name":"AI Document Assistant"}]},{"@type":"WebSite","@id":"https:\/\/qcoders.com\/#website","url":"https:\/\/qcoders.com\/","name":"Qcoders","description":"\u0628\u0631\u0645\u062c\u064a\u0627\u062a \u062a\u0634\u063a\u0651\u0644 \u0623\u0639\u0645\u0627\u0644\u0643.","publisher":{"@id":"https:\/\/qcoders.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/qcoders.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ar"},{"@type":"Organization","@id":"https:\/\/qcoders.com\/#organization","name":"Qcoders","url":"https:\/\/qcoders.com\/","logo":{"@type":"ImageObject","inLanguage":"ar","@id":"https:\/\/qcoders.com\/#\/schema\/logo\/image\/","url":"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qcoders-logo-qcoders-2026.png","contentUrl":"https:\/\/qcoders.com\/wp-content\/uploads\/2026\/10\/qcoders-logo-qcoders-2026.png","width":2000,"height":398,"caption":"Qcoders"},"image":{"@id":"https:\/\/qcoders.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/qcoders.com\/ar\/wp-json\/wp\/v2\/pages\/149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/qcoders.com\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/qcoders.com\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/qcoders.com\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/qcoders.com\/ar\/wp-json\/wp\/v2\/comments?post=149"}],"version-history":[{"count":22,"href":"https:\/\/qcoders.com\/ar\/wp-json\/wp\/v2\/pages\/149\/revisions"}],"predecessor-version":[{"id":1088,"href":"https:\/\/qcoders.com\/ar\/wp-json\/wp\/v2\/pages\/149\/revisions\/1088"}],"up":[{"embeddable":true,"href":"https:\/\/qcoders.com\/ar\/wp-json\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/qcoders.com\/ar\/wp-json\/wp\/v2\/media?parent=149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}