docs: add architecture document